我想要实现的是正确实施
def dynamix[A, B](a: A): A with B
Run Code Online (Sandbox Code Playgroud)
我可能知道B是什么,但不知道A是什么(但如果B有自我类型,那么我可以在A上添加一些约束).scala编译器对上面的签名很满意,但我还不知道实现的样子 - 如果可能的话.
我想到了一些选择:
你有其他可能有用的想法吗?你会推荐哪种方式?期待什么样的"挑战"?
或者我应该忘记它,因为目前的Scala限制是不可能的?
我的问题背后的意图:说我有一个业务工作流程,但它不是太严格.一些步骤具有固定顺序,但其他步骤没有,但最后必须完成所有步骤(或者其中一些步骤需要进一步处理).
更具体的例子:我有一个A,我可以添加B和C. 我不在乎先做哪个,但最后我需要A带B和C.
评论:我对Groovy不太了解,但是我想出了这个问题,我想这或多或少与我想要的一样,至少在构思上.
我目前正在发现scala,我想知道我是否可以使用工厂的特性.
我试过这个:
abstract class Foo {
...
}
object Foo {
def apply() = new Bar
private class Bar extends Foo {
...
}
}
Foo() with MyTrait // Not working
我想这是因为with必须先于new.
有没有办法做到这一点?
谢谢
我想创建一个带有变量的实例,指定下面的一些特征,这会给你一个错误.无论如何在scala中这样做?
var traitRefer = classOf[SomeTrait]
var a = new SomeClass() with traitRefer
Run Code Online (Sandbox Code Playgroud)