相关疑难解决方法(0)

为什么这个参考模糊不清?

import swing._

object PeerTest extends SimpleSwingApplication {
  def top = new MainFrame {
    val p = peer.getMousePosition 
  }
}
Run Code Online (Sandbox Code Playgroud)

error: ambiguous reference to overloaded definition,
both method getMousePosition in class Container of type (x$1: Boolean)java.awt.Point
and  method getMousePosition in class Component of type ()java.awt.Point
match expected type ?
val p = peer.getMousePosition
Run Code Online (Sandbox Code Playgroud)

但添加类型

val p: Point = peer.getMousePosition 
Run Code Online (Sandbox Code Playgroud)

没事.为什么?

编辑:导致问题:

class A {
  def value() = 123
}

class B extends A {
  def value(b: Boolean) = 42 …
Run Code Online (Sandbox Code Playgroud)

scala scala-swing

8
推荐指数
1
解决办法
2017
查看次数

Scala 歧义与无括号函数调用

原谅冗长的设置。这个问题与Scala相关,但没有得到回答:对重载定义的模糊引用 - 最佳消歧?.

我对 Scala 很陌生,让我失望的一件事是 Scala:

  • 拥有一流的功能
  • 使用对象点表示法而不带任何括号参数列表时调用函数(就像函数是属性一样)

这两种语言特性让我很困惑。看下面的代码:

类我的类{
    def something(in: String): String = {
        在 + "_X"
    }

    定义一些东西:字符串 => 字符串 = {
        案例_ =>“固定”
    }
}

val my = new MyClass()

println(List("foo", "bar").map(my.something))

我希望List("foo_X", "bar_X")通过调用somethingmap's requiredString => ?参数匹配的原型来打印。相反,输出是List("Fixed", "Fixed")- Scala 2.11 正在调用无参数something(),然后将其返回值传递给map.

如果我们注释掉 的第二个无参数原型something,输出变为预期结果,证明另一个原型在上下文中是有效的。

向第二个原型添加一个空参数列表(制作它def something())也会改变行为。

改变my.somethingtomy.something(_)唤醒 Scala 到它之前默默忽略的歧义:

错误:对重载定义的引用不明确, …

scala

6
推荐指数
1
解决办法
463
查看次数

标签 统计

scala ×2

scala-swing ×1