2014-07-23 1 views
0
scala> val a = println("Hello World") 
Hello World 
a: Unit =() 

a: Unit()이 올까요? val a에 값을 할당했습니다.스칼라에서 val a = "Hello World"와 val a = println ("Hello World")의 차이점

그러나 우리는

val a = "Hello World" 같이 할 경우에만

a: String = Hello World

가 여기에 우리가 발로 일부 문자열을 할당 보여줍니다. 그래서 그것은 그것을 준다.

첫 번째 경우에는 inbuilt 함수 println()이 호출되고 반환되는 값이 있습니다. 그렇지?

그런데 a: Unit()이 나타나는 이유는 무엇입니까?

a:Unit() 의미 - 아무 것도 반환 할 수 있습니다!

답변

1

C 또는 Java에 익숙하다면 유닛 유형은 무효입니다. 방금 넘겨 준 두 예제의 차이점은 아무 것도 반환하지 않는다는 것입니다. 스칼라에서는 반환 유형이 마지막 실행 작업에 의해 주어집니다. 당신이 println 기능을 따른다면 당신은 자바 정의에 도착 : 전에 말했듯이,

public void println(Object paramObject) 

void을 입력있다. 부 귀환 유형

다른 예는 위치 : val a = "some string" 컴파일러는 자동적으로 (이 경우, 문자열의) 그 변수의 타입을 추론 입력하면

for { 
    someValue <- someList 
} // here the return type is unit because you are missing the yield 

val a =() 

번째 예 대신 스칼라에 값 대입한다.

val someInt = 12 // Int 
val someLong = 10L // Long 
val someList = List("123", "456") // List[String] 
1

스칼라 단위라는 특별한 유형이 포함 (이에 대한 타입 동의어는 또한()), 자바의 무효, 더 리턴 값을 상징없는 유사합니다. println 함수는 인수를 기본 출력 장치 (stdout)에 인쇄하고 아무것도 반환하지 않습니다. 당신이 당신의 입력에 값을 할당하는 경우

지금의 REPL이되는, 귀하의 경우에는

scala> val x = 5; val y = 1; 
x: Int = 5 
y: Int = 1 

, 당신은에 println의 반환 값을 할당 예 : 정의 된 각 변수의 값을 출력합니다 전술 한 단위. 즉, "Hello World"는 println과 a의 일치어입니다. Unit =()는 repl에 할당을 수행 한 결과입니다.

1

스칼라에는 절차가없고 기능 만 있습니다.

절차는 반환 유형 Unit이있는 함수입니다.

Martin Odersky의 슬라이드 # 45 http://www.slideshare.net/Typesafe/scaladays-keynote/http://www.youtube.com/watch?feature=player_detailpage&v=kkTFx3-duc8#t=2674을 참조하십시오.당신이이

val a = println("Hi") 

쓰기

비록

val a = { println("Hi") } 

def x() { println("Hi") } 
val a = x() 

는 x의 정식 버전 (의 익명 버전과 같다)와에 내부적으로 확장 제거 된 모든 "설탕"은

01입니다.

단위 값은 스칼라 콘솔에서()로 압축됩니다. 당신이 당신의 "소형 버전"을 쓸 때

그래서 당신은 :

val a = println("Hi") 
Hi <-- result of the call to the println in the stdout 
a:Unit =() <-- here a - name of variable, 
       Unit = type of the a variable, 
       and the() is the current value of a 
관련 문제