2015-01-26 3 views
1

정확한 이름이 무엇인지 모르겠지만 스칼라에서 한 번에 두 개 이상의 객체 속성을 설정/변경하는 방법이 있습니까?스칼라에서 다중 객체 속성 설정하기?

sampleObject.name = "bob" 
sampleObject.quantity = 5 

스칼라는 그러한 기능이 있습니까 : 반대로

sampleObject.{ 
    name = "bob", 
    quantity = 5 
} 

:

나는 종류의 뭔가를 찾고 있어요 (개체가 이미 초기화 된 경우)? (그리고 정확한 용어는 무엇입니까?)

답변

4

내가 알고있는 그런 구문이 없기 때문에 좋은 생각입니다. 스칼라에서는 이와 같이 변경 가능한 속성을 사용하는 것이 좋습니다. 이와 같은 기능은 사례 클래스에 존재하지만 변경 불가능한 방식으로 존재합니다. 모든 사례 클래스에는 copy 메서드가있어 클래스 인스턴스의 복사본을 만들 수 있으며 지정한 필드 만 변경할 수 있습니다.

case class Sample(name: String, quantity: Int, other: String) 

scala> val sample = Sample("Joe", 2, "something") 
sample: Sample = Sample(Joe,2,something) 

scala> val sampleCopy = sample.copy(
      name = "bob", 
      quantity = 5 
     ) 

sampleCopy: Sample = Sample(bob,5,something) 
+0

31초 빠른 :이 볼과 같은 일이, 스칼라 매크로를 통해 달성 할 수있는 것으로 보인다 – Nimrod007

+1

을 @TravisBrown의 [blog post] (http://meta.plasm.us/posts/2013/08/30/horrible-code/) 제목으로 언급했듯이 피할 수있을 것입니다. –

+0

이것은 내가 쫓아 온 것 같다! 그것에 대해 생각하기 위해 오는 지금 의미가 있습니다. 나는 그것을줬고 모두 잘 작동하는 것 같다. 건배 – GroomedGorilla

1

그런 의미가 있습니다. 솔직히 다른 답변에 설명 된대로 사례 클래스 copy을 사용하는 것이 좋습니다. 그러나 스칼라이 REPL 세션에 표시된 같은 범위로 개체의 멤버를 가져올 수있는 방법이 있습니다

scala> object sampleObject { 
    | var name = "fred" 
    | var quantity = 1 
    | } 
defined object sampleObject 

scala> { import sampleObject._ 
    | name = "bob" 
    | quantity = 5 
    | } 
관련 문제