2012-05-18 2 views
3

잠긴 PC로 직장에 갇혀 있습니다. 그러나 나는 스칼라 연습을하려고합니다. 심지어 scalac를 설치할 수 없기 때문에 나는 어쨌든이 컴파일되지 ...스칼라 세미콜론은 언제 필요합니까?

을 Ideone.com을 사용하고 있습니다 :

나는 Ideone.com의 스칼라 컴파일러에서 다시이 메시지가
class DPt(var name: String, var x: Double, var y: Double){ 

     def print = println("DPt; name: " + name + " x: " + x + " y: " + y) 
} 


object Main { 
    def main(args: Array[String]) { 
     val pt0 = new DPt("Joe", 1.0, 1.0) 
     println("checking generated accessor: " + pt0.x) 
     pt0 print 
     pt0.x_=(3.0) 
     pt0 print 
    } 
} 

:

나는이 같은 문장의 끝에 세미콜론을 추가 할 때
Main.scala:12: error: Unit does not take parameters 
    pt0 print 
      ^
one error found 
spoj: The program compiled successfully, but Main.class was not found. 
     Class Main should contain method: def main(args: Array[String]). 

그러나 :

class DPt(var name: String, var x: Double, var y: Double){ 

     def print = println("DPt; name: " + name + " x: " + x + " y: " + y) 
} 


object Main { 
    def main(args: Array[String]) { 
     val pt0 = new DPt("Joe", 1.0, 1.0); 
     println("checking generated accessor: " + pt0.x); 
     pt0 print; 
     pt0.x_=(3.0); 
     pt0 print; 
    } 
} 

나는의를 찾을 수 스칼라의 픽스와 픽스 트릭 표기법이 AWESOME인데, 나는 뭔가 빠져 나가야 만합니다. 왜 스칼라는 라인의 끝이 진술의 끝이라고 생각하지 않습니까?

이 블로그의 두 번째 포스터는 대답이있는 것 같습니다. 스칼라 사람들은 이것에 착수해야합니다. 이러한 짜증 ....이 ..이 필자가이 다른 아름다운 언어로 최초로 검출 된 성가신에 대해이지만 http://www.scala-lang.org/node/4143

바로 문서의 또 다른 설명 : http://docs.scala-lang.org/style/method-invocation.html

+1

IDE One 대신 [Simply Scala] (http://simplyscala.com)을 사용하십시오. –

답변

8

는 스칼라를 점 드롭 는 사용자가 arg0 operator arg1 구문을 사용한다고 가정합니다. 1 + 2과 같습니다. 스칼라는 인수가 연산자를 따를 것이라고 가정합니다.

따라서 print은 인수를 취하는 메서드이며 다음 줄로 이동하는 것으로 가정합니다. 실제로 작동하지 않기 때문에 오류가 발생합니다. print은 인수를 취하지 않습니다.

세미콜론을 추가하면 메서드에 대한 인수가 될 수 없다는 것을 컴파일러에게 알리고 있으므로 메서드를 찾지 않아도됩니다. 이것은 컴파일러가 print이 인수를 필요로하지 않는다는 것을 알아내는 데 도움이되므로 모든 것이 좋습니다.

문제를 해결하려면 pt0.print이라고 말하면 문제가 없습니다.

+0

또한'pt0 print' 다음에 빈 줄을 넣을 수 있으며';'와 같이 특정 문장의 끝으로 해석합니다. – birryree

+0

그래서 스칼라에서는 점을 찍을 때 인자가 0 매개 변수를 취하더라도 중위 표기법을 사용한다고 가정합니다. 왜 방법의 절박함에 따라 중서부와 후부의 차이를 알아낼 수 없습니까? 나는 Wampler와 Payne의 Programming Scala를 읽고 있는데, 이에 대한 언급은 없다. 이 예제는 스칼라 코드의 고립 된 라인입니다 : "List (1, 2, 3) size"; 또는 \ n \ n 필수 사항입니다. –

+2

@mattwalters 작년에 트위터를 통해 발표되었습니다. 나는 당신이 그것을 놓쳤다 놀랐다 : http://twitter.com/#!/odersky/statuses/49882758968905728 –

관련 문제