2013-07-03 6 views
0

here에서 스칼라 연속 블로그 게시물을 읽습니다. 불행하게도이 스칼라 2.10.0에서 작동하지 않습니다 : 내가 제안 된 형식을 시도하는 경우스칼라 연속 형식 오류

def f():Int @cps[Int,Int] = {shift { (k:Int=>Int) => k(6) } - 1} 
<console>:10: error: wrong number of type arguments for util.continuations.cps, should be 1 
     def f():Int @cps[Int,Int] = {shift { (k:Int=>Int) => k(6) } - 1} 
       ^
<console>:10: error: type mismatch; 
found : Int @scala.util.continuations.cpsSynth 

@scala.util.continuations.cpsParam[Int,Int] 
required: Int 
     def f():Int @cps[Int,Int] = {shift { (k:Int=>Int) => k(6) } - 1} 

같은 거래는 : 내가 사용하지 않는 입력 매개 변수를 추가하는 경우

def f():Int @cpsParam[Int,Int] = {shift { (k:Int=>Int) => k(6) } - 1} 
<console>:4: error: type mismatch; 
found : Int @scala.util.continuations.cpsSynth 
@scala.util.continuations.cpsParam[Int,Int] 
required: Int 
object $eval { 

, 그것은 불평하지 않습니다

def f2(x:Int):Int @cpsParam[Int, Int=>Int] = shift { (k:Int=>Int) => k } -1 
f2: (x: Int)Int @scala.util.continuations.cpsParam[Int,Int => Int] 

reset(f2(1))(0) 
res12: Int = -1 

왜 이런 일이 일어 났는지 설명 할 수 있습니까?

답변

1

이미 cpscpsParam으로 변경해야한다는 것을 알았습니다.

REPL 외부의 줄을 object 안에 컴파일하면 실제로 작동합니다. REPL이 읽은 내용의 평가를 인쇄하기 위해 장면 뒤에서 REPL이 수행하는 작업의 결과물을 볼 수 있습니다. 는 f:()Int 문자열이 같은 더미 변수에 f의 결과를 할당 생성하는 코드 내가 설명 할 수없는 어떤 이유

scala> def f() = 1 
f:()Int 

: lazy val $result = f을 REPL에서 당신은 입력과 같은 것을 볼 때. -Xprint:parser 옵션을 사용하여 REPL을 시작하면이를 실제로 볼 수 있습니다. 그것은 장면 뒤에서 일어나는 많은 것을 드러 낼 것입니다.

더미 할당을 생성하는 코드는 연속 플러그인을 인식하지 못하고 합성 코드가 유효하지 않습니다.

당신이 게으른 발 문 우회하는 하나의 문에서 객체의 내부 f을 정의 할 수 있습니다이 문제를 해결하려면 : 당신이 f에 더미 매개 변수를 추가하면

$ scala -P:continuations:enable    
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_09). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import util.continuations._ 
import util.continuations._ 

scala> object F { def f():Int @cpsParam[Int,Int] = {shift { (k:Int=>Int) => k(6) } - 1} } 
defined module F 

scala> reset{ F.f() } 
res0: Int = 5 

을의 REPL은 할당하려고하지 않습니다 그 결과는 val이되므로 두 번째 예제가 작동하는 이유입니다.

+0

재미 있습니다. yor 답장을 보내 주셔서 감사합니다. –