我想在这些问题中实现方法链接:
但是,我希望一旦使用了"属性",它就不能再使用了.例如,假设我有一个类"Myclass",我想允许使用定义"foo"和定义"bar"最多一次,我不关心最终的返回类型.从而:
val c = new Myclass
c foo //ok !
c foo bar // ok!
c foo foo // refuse to compile
c foo bar foo //refuse to compile
Run Code Online (Sandbox Code Playgroud)
我在这个问题上挣扎了一段时间,我的视力开始变得模糊!我尝试使用隐式类,但是,他们是否需要解析没有使用关联属性的对象,我无法找到他们是否需要通过从对象可用属性中删除它来"使用"该属性,以及再说一次,我怎么也找不到.
我目前正在使用反射API进行搜索,但对我来说它仍然有点模糊.
帮助将不胜感激!=)
我使用了轻微滥用构建器模式来制作流畅的命令式执行链.我所追求的是一种使编译错误忘记最后的execute方法的方法.我的目标是如下
WithServiceA {
doStuff()
} WithServiceB {
doStuff()
} withClient client
Run Code Online (Sandbox Code Playgroud)
WithServiceA并且WithServiceB都可以返回值,因此如果使用返回值,很明显返回类型是错误的,但如果它们被强制使用,整个对象就会默默地落在地板上.我想确保忘记withClient调用是一个编译错误,无论它在什么上下文中使用.
我希望能够跳过块,如果它们是不需要的并按任意顺序放置,所以我希望替换我之前使用的嵌套内部类模式ala
def onServiceA[A](body: ServiceA => A) = new {
def onServiceB[B >: A](body: ServiceB => B) = {b => {
doStuff()
}
}
Run Code Online (Sandbox Code Playgroud)