2011-09-27 45 views
7

tôi tạo ra như sau:Loại suy luận từ phải sang trái đoạn mã

class PimpToRight[A](f: A => Boolean) { 
    def <| (a: A) = f(a) 
} 
implicit def f2pimp[A](f: A => Boolean) = new PimpToRight(f) 

class PimpToLeft[A](a: A) { 
    def <|: (f: A => Boolean) = f(a) 
    def |> (f: A => Boolean) = f(a) 
} 
implicit def a2pimp[A](a: A) = new PimpToLeft(a) 

Có nhiều phương pháp phải và trái kết hợp sẵn. đang

Tiếp theo hoạt động:

((_: Int) > 3) <| 7 
((_: Int) > 3) <|: 7 
7 |> (_ > 3) 

Nhưng điều này không:

(_ > 3) <| 7 
(_ > 3) <|: 7 

Có thể suy ra các tham số kiểu từ phải sang trái?

+2

Tôi ngạc nhiên rằng có sự khác biệt giữa, '(_> 3) <|: 7' và' 7. \ '<|:\'(_ > 3)', nhưng thực sự chỉ biên dịch sau. Nếu bạn không nhận được câu trả lời ở đây, có thể yêu cầu trên danh sách gửi thư hoặc kiểm tra trình theo dõi lỗi? –

+0

@Kipton lưu ý rằng bạn có thể bỏ qua các dấu tích sau nếu bạn đặt '7' vào dấu ngoặc đơn như sau:' (7). <|:(_ > 3) ', vì trình biên dịch cố gắng gọi' <|: 'trên một' Double'' 7.' mà không có dấu ngoặc đơn, do đó dẫn đến một lệnh infix của '<|:' và dẫn trở lại kiểu vấn đề suy luận. – agilesteel

Trả lời

5

Hai vấn đề này có liên quan: SI-4773SI-1980. Dựa trên những vấn đề này, câu trả lời cho câu hỏi của bạn dường như là không. Trong khi không trực tiếp liên quan đến câu hỏi của bạn, có một bài rất hay của Paul Chiusano trên making the most of type inference in Scala, giải quyết trạng thái hiện tại của kiểu suy luận trong Scala và cung cấp một số lời khuyên hữu ích.

Các vấn đề liên quan