微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

假设我有一个类型为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)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐