首先,对于你的最后一个问题,你需要用
HNil
不
HList
因此,例如,如果我们有以下内容:
def function1(s: String) = "foo " + s
def function2(s: String) = s.toInt
def function3(s: String) = s + " bar"
我们会写道:
val list = function1 _ :: function2 _ :: function3 _ :: HNil
自从
::
就像你在Scala标准库(和其他语言)中找到的cons运算符一样,它取第一个参数(一个项),并将其前置到第二个参数(列表)。
现在是你的第一个问题。鉴于
HList公司
我刚刚定义,我们可以写以下内容:
val obj = "13"
object mapFunc extends Poly1 {
implicit def funcTo[T] = at[String => T](f => f(obj))
}
然后:
scala> (list map mapFunc) == "foo 13" :: 13 :: "13 bar" :: HNil
res0: Boolean = true
关键是,当map元素是一个从字符串(或任何对象类型)到某种东西的函数时,您需要表示这种情况适用的事实。