可以以某种方式定义包对象,以便使用语法糖调用它的 apply 吗?
Can package object be defined somehow so that its apply is called using a syntactic sugar?
让我们有两个来源:
Library/package.scala
:
package object Library {
def apply(name: String) = name.reverse
}
Main.scala
:
object Main extends App {
println(Library.apply("reverse me")) // works
println(Library("reverse me")) // error: package Library is not a value
}
有什么办法解决这个问题吗?我可以在包对象或其他地方添加一些东西,以便我可以使用语法糖直接调用对象,而不必明确指定应用吗?
经过一些实验,我想到我可以使用一个具有相同名称但包含在不同包或对象中的辅助对象,如下所示:
object LibraryApply {
object Library {
def apply(name: String) = _root_.Library.apply(name)
}
}
import LibraryApply._
让我们有两个来源:
Library/package.scala
:
package object Library {
def apply(name: String) = name.reverse
}
Main.scala
:
object Main extends App {
println(Library.apply("reverse me")) // works
println(Library("reverse me")) // error: package Library is not a value
}
有什么办法解决这个问题吗?我可以在包对象或其他地方添加一些东西,以便我可以使用语法糖直接调用对象,而不必明确指定应用吗?
经过一些实验,我想到我可以使用一个具有相同名称但包含在不同包或对象中的辅助对象,如下所示:
object LibraryApply {
object Library {
def apply(name: String) = _root_.Library.apply(name)
}
}
import LibraryApply._