gpt4 book ai didi

scala - Scala 中的特征、函数或特征继承函数?

转载 作者:行者123 更新时间:2023-12-04 06:12:00 26 4
gpt4 key购买 nike

我在 Scala 中有一个具有单一方法的特征。称它为 Computable,唯一的方法是 compute(input: Int): Int。我不知道我是否应该

  • 使用单一方法将其作为独立特征。
  • 继承自 (Int => Int) 并将“compute”重命名为“apply”。
  • 只需摆脱 Computable 并使用 (Int => Int)。

  • 支持它成为特征的一个因素是我可以有用地添加一些额外的方法。但是当然,如​​果它们都是根据计算方法实现的,那么我可以将它们分解成一个单独的对象。

    支持仅使用函数类型的一个因素是简单,并且匿名函数的语法比匿名 Computable 实例的语法更简洁。但是,我无法将实际上是 Computable 实例的对象与将 Int 映射到 Int 但不打算在与 Computable 相同的上下文中使用的其他函数区分开来。

    其他人如何处理这类问题?这里没有正确或错误的答案;我只是在寻求建议。

    最佳答案

    如果您将其设为 Trait 并且仍希望能够使用轻量级函数语法,您还可以在您想要它们的位置另外添加隐式转换:

    scala> trait Computable extends (Int => Int)
    defined trait Computable

    scala> def computes(c: Computable) = c(5)
    computes: (c: Computable)Int

    scala> implicit def toComputable(f: Int => Int) = new Computable { def apply(i: Int) = f(i) }
    toComputable: (f: (Int) => Int)java.lang.Object with Computable

    scala> computes( (i: Int) => i * 2 )
    res0: Int = 10

    关于scala - Scala 中的特征、函数或特征继承函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3068748/

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