Tôi chỉ pottering về với Tony Morris' excellent exercise on catamorphisms, khi tôi đang suy nghĩ chuyện gì đang xảy ra trong tình huống sau đây ...Scala suy luận kiểu câu hỏi
def cata[X](some: A => X, none: => X): X
Bây giờ tôi gọi phương pháp này như sau:
def isDefined: Boolean = cata(_ => true, false)
Tôi đã tự hỏi liệu trình inferencer loại có xác định loại _ => true
là A => Boolean
hoặc Any => Boolean
. Do thực tế rằng Function1
là contra-biến trong tham số đầu vào của nó, cả hai sau biên dịch tốt:
def isDefined: Boolean = cata((_: A) => true, false) //#1
def isDefined: Boolean = cata((_: Any) => true, false) //#2
Vậy câu hỏi là, không loại inferencer đưa ra # 1 hoặC# 2?
Bạn đang sử dụng phiên bản 'scalac' nào? –
Tôi đang sử dụng 2.8.0 RC2 –