【问题标题】:How to create my own array in Ruby如何在 Ruby 中创建自己的数组
【发布时间】:2015-05-19 20:10:14
【问题描述】:
a = MyArray.new(3){ |i| (i+1).to_s }
a << 1
puts " #{a.size} #{a[1]} #{a.first} "
b = MyArray.new; b.push("a").push("b")
a += b

和我自己的 a.ok("foo") 自己的变量 a.nowy 等

如何使用我自己的变量和方法以及数组的所有方法创建数组类: [] 每个排序 .push delete ....

附:是否可以仅接收特定的数组元素?例如只有“字符串”还是只有整数? 重新定义初始化?

【问题讨论】:

    标签: ruby iterator


    【解决方案1】:

    试试这个,但首先阅读这个:http://words.steveklabnik.com/beware-subclassing-ruby-core-classes

    class MyClass < Array
    
      def my_new_method
        # do fancy array tricks here
      end
    
    end
    

    【讨论】:

    • 告诉我如何将我的变量和方法添加到 MyClass m = MyClass.new(1) p m.variable m[2]
    • 如果我创建 a = MyClass.new 和 b = MyClass.new a+=b 是数组。不是我的班级。我失去了所有的变量
    【解决方案2】:

    继承!

    class MyClass < Array
      #implement functionality
      def initialize(args)
        super()
      end
    
      def custom_push(element)
        self.push(element)
      end
    end
    

    您可以在您的类中创建新方法,并覆盖Array 类中已存在的方法。

    值得一提的是eachsort 不是Array 类上的方法,它们是Array 包含的Enumerable 模块的一部分。这有点吹毛求疵,但重要的是要知道。

    【讨论】:

    • 是否可以检查推入数组的内容?重新定义初始化?
    • 我可以通过多种方式放入数组,
    • 我不明白最后的评论,但你试图做的事情听起来很邪恶。谨慎行事
    • 告诉我是否可以创建我自己的 Array 类来仅存储“没有 fixnum、nil 等的字符串和整数?
    • 是的,有几种不同的方法。我会使用观察者来监听数组上的添加:ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html 当数组更改时,如果新添加的元素的类型与您想要的不匹配,则引发异常
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2014-03-03
    相关资源
    最近更新 更多