복붙노트

[SCALA] 스칼라에서 "새로운"키워드

SCALA

스칼라에서 "새로운"키워드

스칼라에서 개체를 만들 때 우리는 새로운 키워드를 적용해야합니다 - 나는 아주 간단한 질문이 있습니다? 우리가 자바는 객체 인스턴스화하려고 할 때인가?

해결법

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

    1.당신은 클래스 자신의 생성자를 참조 할 때 새 키워드를 사용 :

    당신은 클래스 자신의 생성자를 참조 할 때 새 키워드를 사용 :

    class Foo { }
    
    val f = new Foo
    

    생략 컴패니언 객체를 참조하는 경우 새로운 방법을 적용 :

    class Foo { }
    object Foo {
        def apply() = new Foo
    }
    
    // Both of these are legal
    val f = Foo()
    val f2 = new Foo
    

    당신이 경우 클래스를 변경 한 경우 :

    case class Foo()
    

    스칼라는 비밀리에이로 돌려, 당신을위한 동반자 객체를 생성한다 :

    class Foo { }
    object Foo {
        def apply() = new Foo
    }
    

    당신은 할 수 있습니다

    f = Foo()
    

    마지막으로, 동반자가 적용된다는 것을 말한다 아무런 규칙이 없다는 것을 명심 방법은 생성자에 대한 프록시되어야합니다 :

    class Foo { }
    object Foo {
        def apply() = 7
    }
    
    // These do different things
    > println(new Foo)
    test@5c79cc94
    > println(Foo())
    7
    

    그리고, 당신은 자바 클래스를 언급 한 이후 : 예 - 자바 클래스는 거의 없다 새로운 실제 사용해야 있도록와 동반자 객체는 방법을 적용 클래스의 생성자입니다.

  2. ==============================

    2.전혀. 당신이 스칼라의 새로운 ommit 일반적으로 두 가지 경우가있다. (oftenly 저장하는 정적 기능과 당신이 자바에서 볼 수있는 것과 유사한 공장의 일종으로 사용된다) 싱글 개체 :

    전혀. 당신이 스칼라의 새로운 ommit 일반적으로 두 가지 경우가있다. (oftenly 저장하는 정적 기능과 당신이 자바에서 볼 수있는 것과 유사한 공장의 일종으로 사용된다) 싱글 개체 :

    scala> object LonelyGuy { def mood = "sad" }
    defined module LonelyGuy
    
    scala> LonelyGuy
    res0: LonelyGuy.type = LonelyGuy$@3449a8
    
    scala> LonelyGuy.mood
    res4: java.lang.String = sad
    

    케이스 클래스들 (실제로, 아래 객체 클래스 + = 컴패니언 패턴, 예를 들면, 동일한 이름을 가진 객체 클래스를 갖는있다) :

    scala> case class Foo(bar: String) 
    defined class Foo
    
    
    scala> Foo("baz")
    res2: Foo = Foo(baz)
    

    간단한 클래스로 작업 할 때 그래서, 규칙은 자바와 동일합니다.

    scala> class Foo(val bar: String) 
    defined class Foo
    
    scala> new Foo("baz")
    res0: Foo = Foo@2ad6a0
    
    // will be a error 
    scala> Foo("baz")
    <console>:8: error: not found: value Foo
           Foo("baz")
    

    보너스는 다음과 같이 구성 할 수있다 스칼라의 익명 클래스,있다 :

    scala> new { val bar = "baz" }
    res2: java.lang.Object{val bar: java.lang.String} = $anon$1@10ee5b8
    
    scala> res2.bar
    res3: java.lang.String = baz
    
  3. ==============================

    3.도티에 따라 (나중에 8 년 2020 년 중반를 출시한다) 스칼라 3,로 : 결코.

    도티에 따라 (나중에 8 년 2020 년 중반를 출시한다) 스칼라 3,로 : 결코.

    스칼라도 3은이 스레드로, "새로운"떨어질 것

    class StringBuilder(s: String) {
       def this() = this(s)
    }
    
    StringBuilder("abc")  // same as new StringBuilder("abc")
    StringBuilder()       // same as new StringBuilder()
    
  4. from https://stackoverflow.com/questions/9727637/new-keyword-in-scala by cc-by-sa and MIT license