【发布时间】:2015-09-16 05:32:06
【问题描述】:
在 scala 中有没有办法定义一个函数 prototype 使其具有像常规函数一样的参数名称?例如,我有一个工厂,我可以将其表示为这样的单个函数特征:
trait FactoryTrait {
def build(factory: ActorRefFactory, id: Int, creator: ActorRef): ActorRef
}
如果我将它作为参数传递给一个类并调用它,检查类型不仅可以告诉我build 接受三个参数及其类型,而且还有描述性名称。但是我必须传递工厂的实例并调用factory.build(actorRefFactory, id, creator) 而不仅仅是一个简单的函数。
另一方面,如果我将工厂定义为如下类型:
type FactoryDef = (ActorRefFactory, Int, ActorRef) => ActorRef
我可以将函数引用直接作为 arg 传递,我可以调用 factory(actorRefFactory, id, creator) 但检查 factory 缺少描述性参数命名,例如,IntelliJ 只是调用它们 v1, v2, v3。虽然这似乎是一个微不足道的抱怨,但当工厂采用多个 ActorRefs 时,签名很快就会变得难以阅读。
是否有另一种方法来定义保留参数名称的函数引用?
【问题讨论】:
-
您能否提供更多有关您的用例的详细信息?
type FactoryDef = (ActorRefFactory, Int, ActorRef) => ActorRef有点通过闭包暴露演员内部,这可能不是一个好主意。 -
用例是一个创建子actor的actor,我不想对其进行硬编码。我注入
factory而不是props函数的原因——除了它有相同的签名问题——是因为props我不能用TestProbe代替创建的孩子
标签: scala