Tôi có this class trong Scala:Tại sao suy luận kiểu Scala thất bại ở đây?
object Util {
class Tapper[A](tapMe: A) {
def tap(f: A => Unit): A = {
f(tapMe)
tapMe
}
def tap(fs: (A => Unit)*): A = {
fs.foreach(_(tapMe))
tapMe
}
}
implicit def tapper[A](toTap: A): Tapper[A] = new Tapper(toTap)
}
Bây giờ,
"aaa".tap(_.trim)
không biên dịch, đưa ra các lỗi
error: missing parameter type for expanded function ((x$1) => x$1.trim)
Tại sao không là kiểu suy luận như String
? Từ lỗi có vẻ như việc chuyển đổi tiềm ẩn không kích hoạt (nếu không lỗi sẽ nằm dọc theo dòng "tap
không phải là thành viên của lớp String
"). Và có vẻ như chuyển đổi phải là Tapper[String]
, có nghĩa là loại đối số là String => Unit
(hoặc (String => Unit)*
).
Điều thú vị là nếu tôi nhận xét ra hoặc của tap
định nghĩa, thì nó sẽ biên dịch.
xuất sắc ý tưởng, cảm ơn! Tôi nghĩ rằng tôi sẽ phải đặt tên cho họ một cách khác nhau. –
Bạn nhanh chóng trở thành Daniel mới, Jason! –
@oxbow Thậm chí tốt hơn, ông thường trích dẫn thông số kỹ thuật, đó là một điều tốt. –