强制访问def

Deb*_*ski 10 scala overloading shadowing

考虑到

object A {
  def m(i: Int) = i
  val m = (i: Int) => i * 2
}
Run Code Online (Sandbox Code Playgroud)

一个人得到

scala> A.m(2)
<console>: error: ambiguous reference to overloaded definition,
both value m in object A of type => (Int) => Int
and  method m in object A of type (i: Int)Int
match argument types (Int)
       A.m(2)
         ^
Run Code Online (Sandbox Code Playgroud)

访问 val可以完成

scala> val fun = A.m
fun: (Int) => Int = <function1>

scala> fun(2)
res: Int = 4
Run Code Online (Sandbox Code Playgroud)

要么

scala> A.m.apply(2)
res: Int = 4
Run Code Online (Sandbox Code Playgroud)

但是如何访问def

jpa*_*cek 11

这是完全垃圾(请不要在家里这样做),但你可以通过分配A一个只有第一个的结构类型的变量m来做到这一点.

val x : { def m(i:Int):Int } = A
x.m(10)
Run Code Online (Sandbox Code Playgroud)

  • @Philippe:那里不需要`asInstanceOf`:`(A:{def m(i:Int):Int}).m(10)` (3认同)