2012-06-24 29 views
8

Dường như scala.math.PartialOrdering.lteq phải luôn luôn được định nghĩa là (hoặc ít nhất, cung cấp cho các kết quả tương tự như):Tại sao scala.math.PartialOrdering.lteq trừu tượng, thay vì được định nghĩa trong điều khoản của .tryCompare?

override def lteq(x: Pattern, y: Pattern) = { 
    tryCompare(x, y).map(_ <= 0).getOrElse(false) 
} 

Có một số lý do thực hiện điều này không được đưa ra trong scala.math.PartialOrdering đặc điểm?

Trả lời

2

Đoán của tôi là khuyến khích viết lteq hiệu quả hơn, vì tất cả các phương pháp khác đều quay trở lại lteq. Vì vậy, bạn sẽ không muốn tạo một Option, sau đó ánh xạ nó. Tôi thà hỏi ngược lại - tại sao không phải là tryCompare thực hiện theo mặc định, ví dụ .:

def tryCompare(x: T, y: T) = { 
    val p1 = lteq(x, y) 
    val p2 = lteq(y, x) 
    if (p1) { 
    if(p2) Some(0) else Some(-1) 
    } else if (p2) Some(1) else None 
} 

... và bạn sẽ không cần phải viết xấu xí override sửa đổi khi thực hiện lteq.

Theo như tôi có thể nhìn thấy tryCompare là không bao giờ được sử dụng trong toàn bộ cơ thể thư viện chuẩn Scala, như vậy có lẽ nó chỉ là một 'còn sót lại' ...

+0

Từ một nhà toán học của (đó là tôi!) Điểm , bằng cách nào đó nó cảm thấy đẹp hơn để lại 'tryCompare' unimplemented, nhưng đồng ý rằng nếu bạn đang khuyến khích mọi người viết mã tối ưu hóa thì' lteq' là một ứng cử viên ghi đè tốt hơn. –

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