使用上下文範圍在Scala中,你可以做的東西一樣斯卡拉方面界定
trait HasBuild[T] {
def build(buildable: T): Something
}
object Builders {
implict object IntBuilder extends HasBuild[Int] {
override def build(i: Int) = ??? // Construct a Something however appropriate
}
}
import Builders._
def foo[T: HasBuild](input: T): Something = implicitly[HasBuild[T]].build(1)
val somethingFormInt = foo(1)
或者乾脆
val somethingFromInt = implicitly[HasBuild[Int]].build(1)
我怎麼能表達有一個適當的隱含HasBuild
任何元素的Seq
的類型範圍內的對象?這可能沒有太多的魔法和外部庫?
Seq[WhatTypeGoesHere]
- 我應該能夠找到每個元素
適當HasBuild
這顯然不會編譯:
val buildables: Seq[_: HasBuild] = ???
您的例子沒有在任何地方使用綁定上下文:當你只有
HasHasBuild
您可以使用隱式HasBuild
參數的方法。它使用implicits。 –你是對的,更新。如果你知道我想要做的事情的名字,也可以隨時更新標題。 –
你的意思是存在型嗎?像'val buildables:Seq [HasBuild [_]] = Seq(IntBuilder,SomeStringBuilder)' –