编码:
object Link {
//TYPE-1 (purely functional)
def apply(name: String, target: Page, f: () => Unit, isExclusive: Boolean) = new Link(name, target, f, isExclusive)
//..
//TYPE-2 (purely side-effect)
def apply(source: Page, target: Page, f: () => Unit, isExclusive: Boolean): Link = {
val link = Link("LINK [" + source.getName + "]->[" + target.getName + "]", target, f, isExclusive)
source += link
link
}
//type-2 too
def apply(source: Page, target: Page, isExclusive: Boolean): Link = Link (source, target, () => Unit, isExclusive)
}
解释:有两种类型的apply
方法 - type-1 仅返回伴随类构造函数返回的内容,而 type-2 不返回任何内容,而只是对新实例执行某些操作。因此,他们有两组不同的论据。但是,我在用下划线标记的第二种类型 2 应用方法上收到错误(见帖子底部) :_Link_
def apply(source: Page, target: Page, isExclusive: Boolean): Link = _Link_ (source, target, () => Unit, isExclusive)
第一个类型 2 应用方法做了一些工作,在第二个(以及第三和第四个......)类型 2 应用方法中,我只想引用第一个,而不是复制那里写的内容。但是,除非所有类型 1 的应用方法都被注释掉,否则Scala-IDE 不允许我这样做。似乎 Scala-IDE 在签名中迷失了方向,看不到我明显的意图。还是我做错了什么?
错误:第二种apply
方法显示错误,内容如下:
重载方法值适用于替代方案:(来源:org.app.Page,目标:org.app.Page,f:()=> Unit,isExclusive:Boolean)org.app.meta.Link <和>(名称:字符串,target: org.app.Page,f: () => Unit,isExclusive: Boolean)org.app.meta.Link 不能应用于 (org.app.Page, org.app.Page, () => Unit .type,布尔值)
更新
请注意,从第一个 type-2 调用 type-1 apply 方法时没有问题。