Tôi đã thấy việc sử dụng ví dụ Function.tupled này trong một ví dụ khác answer: Map(1 -> "one", 2 -> "two") map Function.tupled(_ -> _.length)
.Chức năng và cú pháp giữ chỗ
Nó hoạt động:
scala> Map(1 -> "one", 2 -> "two") map Function.tupled(_ -> _.length)
<console>:5: warning: method tupled in object Function is deprecated:
Use `f.tuple` instead
Map(1 -> "one", 2 -> "two") map Function.tupled(_ -> _.length)
^
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 3, 2 -> 3)
Dường như tôi có thể làm mà không nếu tôi không muốn sử dụng cú pháp giữ chỗ.
scala> Map(1 -> "one", 2 -> "two") map (x => x._1 -> x._2.length)
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 3, 2 -> 3)
Việc sử dụng trực tiếp của cú pháp giữ chỗ không hoạt động:
scala> Map(1 -> "one", 2 -> "two") map (_._1 -> _._2.length)
<console>:5: error: wrong number of parameters; expected = 1
Map(1 -> "one", 2 -> "two") map (_._1 -> _._2.length)
làm việc như thế nào Function.tupled? Dường như có rất nhiều điều xảy ra trong Function.tupled(_ -> _.length)
. Tôi cũng sử dụng nó như thế nào để không nhận được cảnh báo không dùng nữa?
@huynhjl Việc ngừng sử dụng Function.tupled là kết quả của sự hiểu biết rằng một hàm phải biết cách tự giải mã mà không cần trợ giúp. Tuy nhiên, điều đó thực sự không hoạt động tốt với suy luận kiểu. Tôi chắc chắn hy vọng họ không loại bỏ Function.tupled mà không làm cho các loại inferencer đủ thông minh để có được xung quanh vấn đề này. –
Tôi không được chấp nhận nó ngay bây giờ. – extempore