【问题标题】:class with unlimited arguments scala具有无限参数的类
【发布时间】:2018-10-02 04:58:58
【问题描述】:

无论如何要创建一个 Scala 类,它是一个对象 Array ,它在数组中具有未定义数量的对象。

例如,我可以使用 var 做我想做的事

var River1 = new ArrayBuffer[RiverReach]
River1.+=(rr1,rr2,rr3)

这很好用,但我想要一个类,这样我就可以向它添加一堆方法。目前我可以在 () 中手动添加参数,但数量可能会因对象而异。有没有办法不设限制?一些上下文我是一个 scala 初学者,我目前正在通过 udemy 课程学习,所以请多多包涵。任何帮助将不胜感激

当前设置。我使用 ArrayBuffer 作为它的可变对象,我想将数组中所有元素的值相加到头部。但这是另一个页面的问题。

class River[T>:ArrayBuffer[RiverReach]]() {
  //bunch of methods
 }

【问题讨论】:

    标签: arrays scala class user-defined-functions scala-collections


    【解决方案1】:

    你可以将缓冲区包装成River,将River的+=等方法重定向到缓冲区,然后添加你需要的所有其他函数,例如:

    case class RiverBeach(altitude: Int)
    
    class River {
    
      private val buffer = new ListBuffer[RiverBeach]()
    
      def +=(riverBeach: RiverBeach): River = {
        buffer += riverBeach
        this
      }
    
      def ++=(riverBeach: RiverBeach*): River = {
        buffer ++= riverBeach
        this
      }
    
      def size: Int = buffer.size
    
      // your methods
    
    }
    
    val river = new River()
    
    river += RiverBeach(1)
    river ++= (RiverBeach(2), RiverBeach(3), RiverBeach(4))
    
    println(river.size) // 4
    

    【讨论】:

    • River 也应该扩展 ArrayOpsArrayLike 这将节省一些时间来实现数组功能。
    • 优雅的解决方案,我删除了第一种减少代码数量的方法,这似乎解决了我的困境。
    【解决方案2】:

    Mike Allens 的想法是正确的,更多阅读后更好的解决方案是简单地扩展 Arraybuffer

    class River extends Arraybuffer[RiverReach] {
     //bunch of methods 
    
     }
    

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 2011-11-06
      • 2016-01-13
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多