에 다리 할당을 수행내가이 작업을 수행 할 수 스칼라
var (a, b) = (0, 0)
a = (b = 100)
하지만 스칼라는
error: type mismatch;
found : Unit
required: Int
는 내가 원하는 것은 같은 값으로 A와 B를 할당하는 것입니다 불평한다. 스칼라가 왜 Int가되어야하는 단위가 되는가?
에 다리 할당을 수행내가이 작업을 수행 할 수 스칼라
var (a, b) = (0, 0)
a = (b = 100)
하지만 스칼라는
error: type mismatch;
found : Unit
required: Int
는 내가 원하는 것은 같은 값으로 A와 B를 할당하는 것입니다 불평한다. 스칼라가 왜 Int가되어야하는 단위가 되는가?
이유는 무엇입니까? 할당 표현식 유형은 Unit
이며 그 이유는 다음과 같습니다. 연결된 과제가 없습니다. 기간.
명세서는 단위를 반환하는 과제입니다. 이유에 대해서는 this related question을 참조하십시오. 당신은 당신이 원하는 경우,이 작업을 수행 할 수 있습니다
scala> var (a,b) = (0,0)
a: Int = 0
b: Int = 0
scala> a = {b = 100; b}
a: Int = 100
링크를 제공해 주셔서 감사합니다. Martin은 Scala를 더 빠르게 만들고 싶다고 설명했습니다. 아마도 원래 링크에 댓글을 달고 싶습니다. –
당신은 당신의 자신의 유형 (그것을 잘 결합해야합니다으로는 콜론으로 끝나야합니다) 특별 할당 연산자를 정의하거나 일반적인 래퍼를 작성할 수 (포함 implit 전환). 실제로이를 사용하는 것이 좋습니다 않을 것이다, 그러나 여기 간다 :
case class M[T](var t:T) {
def =: (m: M[T]):M[T] = {m.t = t ; this}
}
implicit def anyToM[T](v:T) = M(v)
implicit def mToAny[T](m:M[T]) = m.t
def main(args: Array[String]) {
var a = M(0)
var b = M(0)
var c = M(0)
a =: b =: c =: 100
println(a + b + c) //--> 300
}
나는 항상 몇 번의 키 입력을 저장하기 위해 무거운 마술 (magick)을 소환하는 나쁜 아이디어라고 생각합니다. 독일에서 우리는 ...
case class assign[T](v: T) {
def to(vals: (T => Unit)*) { vals.foreach{ vv => vv(v) } }
}
var (a,b) = (0,0)
assign(39) to (a = _, b = _)
assert(a == 39)
assert(b == 39)
을 "대포로 참새를 촬영"이 부를 것이다 또는 당신은 그것이 with
문의 비교적 간단한 버전을 에뮬레이트 이름을 바꿀 수 있습니다.
with(20) do (a = _, b = _, print)
scala> var a,b,c,d,e,f,g = 0
a: Int = 0
b: Int = 0
c: Int = 0
d: Int = 0
e: Int = 0
f: Int = 0
g: Int = 0
scala> var f,i,j,k,m,n,o = new Object{}
f: java.lang.Object = [email protected]
i: java.lang.Object = [email protected]
j: java.lang.Object = [email protected]
k: java.lang.Object = [email protected]
m: java.lang.Object = [email protected]
n: java.lang.Object = [email protected]
o: java.lang.Object = [email protected]
scala>
좋은 트릭. 감사. –
왜 왜 물어? 왜냐하면 나는 그것이 의미가 없다는 것을 알기 때문입니다. 자바는 그것을 가지고 있습니다, 루비는 그것을 가지고 있습니다, 스칼라가 왜 다른가? –
스칼라는 그 언어가되고 싶지 않기 때문에. Scala에 break 문이없는 것과 같은 이유입니다. Java 및 Ruby에서 가져온 필수 수하물을 출입국 관리소에서 퇴장 시키도록 권장합니다. –
Weeeelllll, 나는 그것을 제기하는 것을 싫어하지만, 스칼라는 요즘 (2.8 이후) break 문을 가지고있다. 하지만 가져 오기 (scala.util.control.Breaks._ import)해야합니다. 그래서 아무도 사용하지 않을 것입니다. 그리고 그것은 아마도 정확히 의도 된 것입니다 :-) –