[SCALA] 스칼라에서 "새로운"키워드
SCALA스칼라에서 "새로운"키워드
스칼라에서 개체를 만들 때 우리는 새로운 키워드를 적용해야합니다 - 나는 아주 간단한 질문이 있습니다? 우리가 자바는 객체 인스턴스화하려고 할 때인가?
해결법
-
==============================
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.전혀. 당신이 스칼라의 새로운 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.도티에 따라 (나중에 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()
from https://stackoverflow.com/questions/9727637/new-keyword-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 SBT에 대한 힙 크기를 설정하는 방법? (0) | 2019.11.08 |
---|---|
[SCALA] (의 AST를 얻을) 스칼라에서 식을 구체화 사용하는 가장 쉬운 방법은 무엇입니까? (0) | 2019.11.08 |
[SCALA] 스칼라 모음으로 자바 컬렉션을 변환 (0) | 2019.11.08 |
[SCALA] 선물과 스칼라의 "에 대한 이해" (0) | 2019.11.08 |
[SCALA] 언제, 왜 하나는 스칼라에서 실용적 펑터를 사용한다 (0) | 2019.11.08 |