【问题标题】:Scala - Perform Operation on two objects only if an inner field is equalScala - 仅当内部字段相等时才对两个对象执行操作
【发布时间】:2018-12-10 01:37:56
【问题描述】:

如果我有

Class Box[+T] {
   num: Int,
   t: T
}

我想创建一个将两个框相加的方法,但实际上它只是添加了 num 并创建了一个新框,我将如何做到这一点,但要确保两个 t 相等?我不希望类型相同,但 t 的内部部分相同

【问题讨论】:

    标签: scala generics type-erasure


    【解决方案1】:

    您可以执行以下操作:

    def add[T](box1: Box[T], box2: Box[T]): Option[Box[T]] = {
      if(box1.t == box2.t) Some(Box(box1.num + box2.num, box1.t))
      else None
    }
    

    【讨论】:

    • @JoelBerkeley 我认为应该。另外,我想这没关系。我希望避免选项。似乎没有办法在编译时获得安全性(没有 Option 返回类型),即使我们将其限制为每个 Box 中必须有相同的对象引用。问题在于,有人会尝试添加两个不同的框,这更像是程序员的错误,这就是我不喜欢 Option 的原因;似乎更沉默了。我想知道是抛出异常还是使用 require() 语句会更好
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2019-08-09
    • 2020-01-08
    相关资源
    最近更新 更多