加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何使用HList调用多个参数的函数?

发布时间:2020-12-16 18:22:54 所属栏目:安全 来源:网络整理
导读:假设我有一个类型为A :: B :: C :: HNil的HList和一个函数(A,B,C)= d val hlist: A::B::C::HNil = ???def foo(a: A,b: B,c: C): D = ??? 现在我需要一个功能A :: B :: C :: HNil = D,使用foo返回D. def bar(hslist: A::B::C::HNil): D = ??? 你会如何实现吧
假设我有一个类型为A :: B :: C :: HNil的HList和一个函数(A,B,C)=> d

val hlist: A::B::C::HNil = ???
def foo(a: A,b: B,c: C): D = ???

现在我需要一个功能A :: B :: C :: HNil => D,使用foo返回D.

def bar(hslist: A::B::C::HNil): D = ???

你会如何实现吧?

解决方法

您可以使用Shapeless的FnToProduct直接执行此操作,它提供了用于将FunctionN转换为带有HList的Function1的产品语法:

import shapeless._,syntax.std.function._

type A = String
type B = Symbol
type C = Int
type D = List[String]

val hlist: A :: B :: C :: HNil = "foo" :: 'x :: 1 :: HNil

def foo(a: A,c: C): D = List.fill(c)(a + b)

def bar(hslist: A :: B :: C :: HNil): D = (foo _).toProduct.apply(hslist)

在许多情况下,您可能甚至不想要单独的条形定义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读