복붙노트

[SCALA] 스칼라 생성자 과부하?

SCALA

스칼라 생성자 과부하?

당신은 어떻게 스칼라에서 오버로드 된 생성자를 제공합니까?

해결법

  1. ==============================

    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. ==============================

    2.

     class Foo(x: Int, y: Int) {
         def this(x: Int) = this(x, 0) // default y parameter to 0
     }
    
  3. ==============================

    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. ==============================

    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. ==============================

    5.나는 더 많은 정보를 추가 할 수 스칼라 생성자 (2008-11-11)를 할 수있다 생각했다.

    나는 더 많은 정보를 추가 할 수 스칼라 생성자 (2008-11-11)를 할 수있다 생각했다.

  6. ==============================

    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
      }
    }
    
  7. from https://stackoverflow.com/questions/1095329/scala-constructor-overload by cc-by-sa and MIT license