[SCALA] 스칼라 생성자 과부하?
SCALA스칼라 생성자 과부하?
당신은 어떻게 스칼라에서 오버로드 된 생성자를 제공합니까?
해결법
-
==============================
1.그것은 명시 적으로 스칼라에서 보조 생성자는 첫 작업으로, 대답, 또는 같은 클래스에서 다른 보조 생성자 (landon9720의에서와 같이) 기본 생성자를 호출해야 하나 언급 할 가치가있다. 그들이 자바에서 가능한 한 그들은 단순히 명시 적 또는 암시 적으로 슈퍼 클래스의 생성자를 호출 할 수 없습니다. 이 기본 생성자는 클래스 항목의 유일한 지점입니다 것을 보장한다.
그것은 명시 적으로 스칼라에서 보조 생성자는 첫 작업으로, 대답, 또는 같은 클래스에서 다른 보조 생성자 (landon9720의에서와 같이) 기본 생성자를 호출해야 하나 언급 할 가치가있다. 그들이 자바에서 가능한 한 그들은 단순히 명시 적 또는 암시 적으로 슈퍼 클래스의 생성자를 호출 할 수 없습니다. 이 기본 생성자는 클래스 항목의 유일한 지점입니다 것을 보장한다.
class Foo(x: Int, y: Int, z: String) { // default y parameter to 0 def this(x: Int, z: String) = this(x, 0, z) // default x & y parameters to 0 // calls previous auxiliary constructor which calls the primary constructor def this(z: String) = this(0, z); }
-
==============================
2.
class Foo(x: Int, y: Int) { def this(x: Int) = this(x, 0) // default y parameter to 0 }
-
==============================
3.현재 스칼라는 또한 constructor- 및 방법 매개 변수의 디폴트 값을 가질 수 있습니다 2.8.0. 이처럼
현재 스칼라는 또한 constructor- 및 방법 매개 변수의 디폴트 값을 가질 수 있습니다 2.8.0. 이처럼
scala> class Foo(x:Int, y:Int = 0, z:Int=0) { | override def toString() = { "Foo(" + x + ", " + y + ", " + z + ")" } | } defined class Foo scala> new Foo(1, 2, 3) res0: Foo = Foo(1, 2, 3) scala> new Foo(4) res1: Foo = Foo(4, 0, 0)
기본 값 매개 변수는 매개 변수 목록에없는 기본 값으로 사람 후에 와야합니다.
-
==============================
4.내 코드를 보면서, 나는 갑자기 내가 생성자 종류의 과부하를했다는 것을 깨달았다. 나는 그 질문을 기억하고 다른 답변을주고 돌아왔다 :
내 코드를 보면서, 나는 갑자기 내가 생성자 종류의 과부하를했다는 것을 깨달았다. 나는 그 질문을 기억하고 다른 답변을주고 돌아왔다 :
스칼라에서는 생성자를 오버로드 할 수 없지만 기능이 작업을 수행 할 수 있습니다.
또한, 많은 동료의 적용 기능은 각각의 클래스의 공장을 반대하기 위해 선택합니다.
이 클래스는 추상적 제작하고 적용 기능 과부하, 당신은 당신의 오버로드 "생성자"가이 클래스를 구현하는 것은-인스턴스화 :
abstract class Expectation[T] extends BooleanStatement { val expected: Seq[T] … } object Expectation { def apply[T](expd: T ): Expectation[T] = new Expectation[T] {val expected = List(expd)} def apply[T](expd: Seq[T]): Expectation[T] = new Expectation[T] {val expected = expd } def main(args: Array[String]): Unit = { val expectTrueness = Expectation(true) … } }
내가 명시 적으로 다른 사람이 오리 형식의 기대 [T]를 반환 각각 기대 [T]를 돌려 적용 정의합니다 {발 예상 : 목록 [T]}.
-
==============================
5.나는 더 많은 정보를 추가 할 수 스칼라 생성자 (2008-11-11)를 할 수있다 생각했다.
나는 더 많은 정보를 추가 할 수 스칼라 생성자 (2008-11-11)를 할 수있다 생각했다.
-
==============================
6.이 시도
이 시도
class A(x: Int, y: Int) { def this(x: Int) = this(x, x) def this() = this(1) override def toString() = "x=" + x + " y=" + y class B(a: Int, b: Int, c: String) { def this(str: String) = this(x, y, str) override def toString() = "x=" + x + " y=" + y + " a=" + a + " b=" + b + " c=" + c } }
from https://stackoverflow.com/questions/1095329/scala-constructor-overload by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 케이스 클래스의 필드 이름의 목록을 가져옵니다 (0) | 2019.11.04 |
---|---|
[SCALA] 스칼라는 밑줄 - 오류 : 확장 기능에 대한 매개 변수 유형 누락 (0) | 2019.11.04 |
[SCALA] 어떻게 sc.textFile 일부 입력 파일을 포함 / 제외 정규식을 사용 하는가? (0) | 2019.11.04 |
[SCALA] 에디터는 주요 유형을 포함하지 않습니다 (0) | 2019.11.03 |
[SCALA] 아파치 스파크 1.3에서 데이터 프레임에 열을 추가 (0) | 2019.11.03 |