2015-08-04 13 views
5

Trước sự ngạc nhiên của tôi điều này không làm việc -tên tượng trưng cho chuỗi suy

implicit class LambdaContext(val sc: StringContext) extends AnyVal { 
    def λ(args: Any*) = args 
} 

scala> λ"λx.x" 
<console>:1: error: ';' expected but string literal found. 
λ"λx.x" 

Mặc dù đó là một tên phương pháp hợp lệ:

scala> new LambdaContext(new StringContext("λx.x")).λ() 
res1: Seq[Any] = List() 

Không chắc chắn nếu nó là một lỗi hoặc hạn chế đơn giản.

Trả lời

0

Tôi không chắc chắn, nhưng khi bạn sử dụng λ trong λ"λx.x" nó dường như được coi là một nhà điều hành và cho các nhà khai thác chỉ ASCII ký tự in được phép. Vì vậy, nếu bạn thay thế λ bằng thứ gì đó ít lạ mắt hơn như l hoặc lambda, nó hoạt động.

implicit class LambdaContext(val sc: StringContext) extends AnyVal { 
    def l(args: Any*) = λ(args) 
    def λ(args: Any*) = args 
} 

scala> l"lx.x" 
res1: Seq[Any] = List()