gpt4 book ai didi

Scala 语法糖,用于透明地调用伴生对象上的一元应用

转载 作者:行者123 更新时间:2023-12-02 08:35:50 25 4
gpt4 key购买 nike

class OpenNLPAnnotator extends ThreadLocal[OpenNLPAnnotatorInstance] {
override def initialValue = new OpenNLPAnnotatorInstance
}

object OpenNLPAnnotator {
private lazy val ann_ = new OpenNLPAnnotator
private def ann = ann_
def apply = ann.get()
}

我有什么方法可以通过 OpenNLPAnnotator.someMethodOnTheTLV 获得 TLV 吗?我必须编写 OpenNLPAnnotator.apply.someMethodOnTheTLV

编辑

根据下面的答案,我认为这样的事情最好

object OpenNLPAnnotator {
private lazy val ann_ = new OpenNLPAnnotator
private def ann = ann_
def apply() = ann.get()
def annotator = ann.get
}

然后我就可以做 annotator.whatever

那当然需要导入,所以除非我把它放在一个包对象中,否则它就会摇摆不定。虽然我还没有使用过包对象,也不了解来龙去脉。

最佳答案

隐式调用apply 方法的唯一方法是在对象名称后添加括号,如下所示:

OpenNLPAnnotator().someMethodOnTheTLV

但是你必须改变apply方法声明(添加括号):

def apply() = ann.get()

讨厌的黑客

您可以创建从 OpenNLPAnnotator.typeOpenNLPAnnotator 的隐式转换,如下所示:

implicit def nastyHack(o: OpenNLPAnnotator.type): OpenNLPAnnotator = o.apply

因此您可以在伴随对象上调用 OpenNLPAnnotator 的所有方法。

OpenNLPAnnotator.someMethodOnTheTLV 将转换为:

nastyHack(OpenNLPAnnotator).someMethodOnTheTLV

注意(回应您的编辑):

您可以在导入时重命名 apply 方法:

导入 OpenNLPAnnotator。{apply => annotator}

关于Scala 语法糖,用于透明地调用伴生对象上的一元应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com