[SCALA] 왜 스칼라 보조 생성자는 다른 생성자에 단일 통화로 구성 할 수 있습니까?
SCALA왜 스칼라 보조 생성자는 다른 생성자에 단일 통화로 구성 할 수 있습니까?
나는 기본 생성자는 클래스 항목의 독방 포인트가되는 방식으로 보조 생성자를 정의하는 장점을 볼 생각합니다. 그런데 왜 내가 이런 일을 할 수 없어?
class Wibble(foo: Int, bar: String) {
def this(baz: List[Any]) = {
val bazLength = baz.length
val someText = "baz length is " ++ bazLength.toString
this(bazLength, someText)
}
}
그것은 어쩌면 보조 생성자는 부작용이없는 및 / 또는 조기 반환 할 수 있음을 보장하는 방법이 있나요?
해결법
-
==============================
1.보조 생성자가 다른 생성자의 단일 호출보다 더 포함 할 수 있지만 자신의 첫 번째 문은 호출 말할 수 있어야합니다.
보조 생성자가 다른 생성자의 단일 호출보다 더 포함 할 수 있지만 자신의 첫 번째 문은 호출 말할 수 있어야합니다.
같이, 스칼라 프로그램에 채널을 설명했다. 6.7 :
그냥 자바로, 하나는 별도의 방법으로 기본 생성자 호출하기 전에 실행되는 코드를 추출하여이 제한을 라운드 얻을 수 있습니다. 분명히 생성자에서 호출하도록 허용하기 위해 동반자 객체에이 도우미 메서드를 이동해야로서 스칼라에서 그것은 좀 더 복잡한 자바보다.
하나는 함수에서 튜플을 반환 할 수 있지만 - -이 반환 튜플은 다음 주 생성자에 인수 목록으로 인정되지 않는 두 개의 생성자 매개 변수가 있고 더욱이, 특정 케이스는 어색하다. 보통 함수의 경우, 당신은 tupled 사용할 수 있지만, 슬프게도,이 생성자을 위해 작동하지 않습니다. 해결 방법은 다른 보조 생성자를 아직 추가하는 것입니다 :
object Wibble { private def init(baz: List[Any]): (Int, String) = { val bazLength = baz.length val someText = "baz length is " ++ bazLength.toString println("init") (bazLength, someText) } } class Wibble(foo: Int, bar: String) { println("Wibble wobble") def this(t: (Int, String)) = { this(t._1, t._2) println("You can execute more code here") } def this(baz: List[Any]) = { this(Wibble.init(baz)) println("You can also execute some code here") } }
이것은 적어도 작품에, 그것은 약간 복잡 경우에도 마찬가지입니다.
scala> val w = new Wibble(List(1, 2, 3)) init Wibble wobble You can execute more code here You can also execute some code here w: Wibble = Wibble@b6e385
@ sschaef 그의 주석에서 지적한 것 같이,이는 동반자 객체의 팩토리 메소드를 사용하여 단순화 할 수있다 :
object Wobble { def apply(baz: List[Any]): Wobble = { val bazLength = baz.length val someText = "baz length is " ++ bazLength.toString println("init") new Wobble(bazLength, someText) } } class Wobble(foo: Int, bar: String) { println("Wobble wibble") }
따라서 우리는 더 이상 객체를 생성하는 새로운 필요가 없습니다 :
scala> val w = Wobble(List(1, 2, 3)) init Wobble wibble w: Wobble = Wobble@47c130
from https://stackoverflow.com/questions/14207989/why-can-auxiliary-constructors-in-scala-only-consist-of-a-single-call-to-another by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 서열로서 문자열 [숯] 패턴 매칭 (0) | 2019.11.23 |
---|---|
[SCALA] 아파치 스파크 : java.lang.NoSuchMethodError .rddToPairRDDFunctions (0) | 2019.11.23 |
[SCALA] 추출기 (추출기를 사용할 것이라고 또는 다른 곳) case 문의 몸에있는 매개 변수를 사용자 정의 할 수 있습니까? (0) | 2019.11.23 |
[SCALA] "=> 외부"정말 무엇을 의미합니까? (0) | 2019.11.23 |
[SCALA] 어떻게 스칼라 미래에 던져 예외를 잡아합니까? (0) | 2019.11.23 |