给出以下代码:
implicit class RichString(s: String) {
def ! = ()
}
case class SomeClass(i: Int, s: String, id: Long)
Run Code Online (Sandbox Code Playgroud)
为什么这样:
"some string" !! SomeClass(5, "test", _)
Run Code Online (Sandbox Code Playgroud)
不编译,抛出以下错误:
Missing parameter type for expanded function ((x$1) => "some string".$bang$bang(SomeClass(5, "test", x$1)))
"some string" !! SomeClass(5, "test", _)
^
Type mismatch;
found : cmd1.SomeClass
required: Long => cmd1.SomeClass "some string" !! SomeClass(5, "test", _)
Run Code Online (Sandbox Code Playgroud)
但所有这些都编译得很好:
val f = SomeClass(5, "test", _)
"some string" !! f
"some string" !! ( SomeClass(5, "test", _) )
"some string" !! { SomeClass(5, "test", _) }
Run Code Online (Sandbox Code Playgroud)
PS:这"some string" !! SomeClass(5, "test", _: Long)也会导致类型不匹配.
正如消息所说,"some string" !! SomeClass(5, "test", _)扩展为x => "some string" !! SomeClass(5, "test", x),而不是 "some string" !! { x => SomeClass(5, "test", x) }.所以!!没有收到函数,它收到一个SomeClass,不编译.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |