【发布时间】:2017-02-01 08:39:29
【问题描述】:
在 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] = ???
【问题讨论】:
-
您的示例未在任何地方使用上下文绑定。它使用隐式。
-
你是对的,更新了。如果您知道我正在尝试做的事情的名称,也可以随时更新标题。
-
你的意思是存在型吗?喜欢
val buildables: Seq[HasBuild[_]] = Seq(IntBuilder, SomeStringBuilder) -
不。我想要一个
Seqof anything,其范围内有一个隐含的HasBuild。 -
所以:
def foo[T: HasBuild](input: Seq[T])?
标签: scala context-bound