【问题标题】:Implicit arguments: how to encode in function signature?隐式参数:如何在函数签名中编码?
【发布时间】:2017-04-27 06:34:53
【问题描述】:

在@TravisBrown 的关于使用 shapeless 枚举 ADT 的启发性极强的 question 之后,我留下了以下代码 sn-p:

implicitly[EnumerableAdt[Foo]].values

我想将它封装在一个方法中,这样我就不必在每次调用后.values(这样对我来说似乎是一个更干净的 API)。 我似乎无法正确理解。每当我尝试封装 implicitly[EnumerableAdt[Foo]] 时,都会出现隐式解析错误。

我尝试过的,对我来说最有意义的是,例如:

def imply[T](implicit ev: T):Set[T] = implicitly[EnumerableAdt[T]].values

当然没有ev 对我来说更没有意义。

我不是类型级编程方面的专家。

【问题讨论】:

    标签: scala typeclass shapeless


    【解决方案1】:

    如果你查看implicitly[X] 的定义,你会发现它需要一个X 类型的隐式参数。在您的示例中,您在范围内有隐式ev: T,这不足以调用implicitly[EnumerableAdt[T]]!请尝试以下定义:

    def imply[T](implicit ev: EnumerableAdt[T]):Set[T] = ev.values
    

    【讨论】:

      猜你喜欢
      • 2018-05-22
      • 2014-05-22
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多