【发布时间】:2018-01-15 17:19:12
【问题描述】:
test_cal 是自定义类的一个实例,get_calendar_items 返回一个数组。我想编写一个在数组上调用的方法,如下所示:
test_cal.get_calendar_items.get_subject
这是我写的方法
def get_subject(number)
puts self[number].subject
end
但是,ruby 给出了一个错误:
undefined method get_subject for #<Array:0x00 ...> (NoMethodError)
如何编写可以在数组上调用的方法?
我假设每个数组都是某种对象。
然后在方法中通过number 访问数组的各个元素。
【问题讨论】:
-
number来自哪里?当你调用它时,你不要把它给get_subject。你不应该说test_cal.get_calendar_items.get_subject(number)吗?那么为什么不直接做test_cal.get_calendar_items[number].subject呢?这是正常的方式。而且更短。 -
在 Ruby 中为 getter 加上
get_前缀是不习惯的。只需调用方法calendar_items或简单地调用items。 -
数组是任意对象的集合。因此,添加仅适用于特定元素的方法没有多大意义(您不必这样做,如上面的 Stefan Pochmann 所示)。更好的方法是为您的集合创建一个自定义类(例如
CalenderItemArray)或extendget_calendar_items返回的数组实例,因此您只需将“集合方法”添加到这些数组。