【问题标题】:Scala mutating a generic classScala 改变一个泛型类
【发布时间】:2018-03-29 20:43:12
【问题描述】:

我有以下用于增量方法的伪代码。

def increment(A: member, B: amount): B = match B {
  case: Integer => // mutate and return amount+1
  case: Float => // mutate and return amount + 1.0
}

我需要增加一个 B 类型的对象数量并返回相同的值。这充满了问题。上面通过匹配类型来增加数量的逻辑可能不是正确的方法,但我不知道还有其他方法。即使做这样的事情——我们如何改变一个泛型类型,比如 B ?我们需要像容器类这样的东西来做到这一点吗?我在所有其他方法上都处于空白状态。

任何帮助将不胜感激。

【问题讨论】:

    标签: scala generics


    【解决方案1】:

    这可能有效:

    def increment [T] (a: T, b: T) (implicit T: Manifest[T], numeric: Numeric[T]): T = 
       numeric.plus (a, b)
    
    scala> increment (7, 4)
    res180: Int = 11
    
    scala> increment (7.0, 4.0)
    res181: Double = 11.0
    
    scala> increment (7, 4.0)
    res182: Double = 11.0
    
    scala> increment (7.0, 4)
    res183: Double = 11.0
    

    【讨论】:

    • 非常感谢!但是,这可能不会在通用类中飞行,对吗?因此,如果我有一个 class[T] 并尝试在此方法中使用该通用 T 。我收到一些错误,例如 "No TypeTag available for T" 。我使用了 TypeTag,因为 Manifest 已被弃用。
    • 嗯,我猜你必须履行numeric的合同——你这样做并提供一个加法吗?
    猜你喜欢
    • 2013-11-29
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多