Ví dụ sau đây là từ sách 'Lập trình trong Scala'. Cho một lớp 'Rational' và định nghĩa phương pháp sau đây:Scala: phương thức toán tử quá tải
def add(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
tôi thành công có thể quá tải phương thức add với một phiên bản tiện lợi mà có một đối Int, và tận dụng định nghĩa trên:
def add(that: Int): Rational =
add(new Rational(that, 1))
Không có vấn đề gì cho đến nay.
Bây giờ, nếu tôi thay đổi tên phương pháp để một tên phong cách điều hành:
def +(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
Và tình trạng quá tải như vậy:
def +(that: Int): Rational =
+(new Rational(that, 1))
tôi nhận được lỗi biên dịch sau:
(fragment of Rational.scala):19: error: value unary_+ is not a member of this.Rational
+(new Rational(that, 1))
^
Tại sao trình biên dịch tìm kiếm một phiên bản đơn nhất của phương thức +
?