gpt4 book ai didi

list - Scala 中的异构列表;使用 map 功能

转载 作者:行者123 更新时间:2023-12-04 02:43:33 25 4
gpt4 key购买 nike

所以问题在于理解无形库的 HLists https://github.com/milessabin/shapeless ;我正在使用 HList 来存储一些函数,即:

val list = HList(
function1(_),
function2(_),
....
functionn(_)
);

它完美地工作:我可以从列表中获取任何函数并应用它:list.head(对象)

但是,我在使用 map 函数(list map mapFunc)时遇到问题:

object mapFunc extends Poly1 {
implicit def default[T] =
at[T](t => {
t(obj)
})
}

上面写着Application doesn't take parameters。那么我该如何处理呢? Mb 我不明白?我是 Scala 的新手。

附注构造函数有一个有趣的效果,此代码构建的 lil 有点不正确:

function1(_)::function2(_)::HNil 它被识别为某种类型的函数,但是 HList(function1(_), function2(_)) 具有正确的类型。

编辑

'附注'已决定 - function1(_)::function2(_)::HNil 确实存在类型不匹配;但是 function1 _::function2 _::HNil 没问题!

最佳答案

首先是你的最后一个问题——你需要用 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 元素是从字符串(或任何您的对象类型)到某物的函数时,情况适用。

关于list - Scala 中的异构列表;使用 map 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19347099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com