尝试在类中提取内部方法的最佳实践/语法是什么?
class Foo
def initialize
end
def get_value
array = (API CALL TO GET ARRAY)
array.array_lookup("Bar")
end
def array_lookup(query)
self.each do |hash|
if hash[:key] == query
p hash[:value]
end
end
end
end
foo = Foo.new
foo.get_value #=> : undefined method `array_lookup' for #<Array:0x007fd3a49a2ca0 (NoMethodError)
错误消息告诉我,我的数组对象不知道如何回应我的方法,因为我有一个没有这种方法的数组,尽管我有这个方法。想知道如何解决这个和类似的用途。我是否会覆盖数组类?我改变了我的自我吗?
答案 0 :(得分:1)
array_lookup是Foo的方法。所以在Foo类中,你可以通过
来调用它array_lookup("Bar")
(不含array.
)
答案 1 :(得分:0)
这样的事情怎么样?您将自定义对象转换为Array的子类,以便获得像#each
这样的数组方法。实际上,想一想,更好的实现可能包括将Enumerable
模块混合到您的自定义类中(思考组合而不是继承)。
class Foo < Array
# More robust to change in application if you allow passing
# the query into this method. Just a suggestion.
def get_value(query)
request_data
lookup(query)
end
protected
def request_data
# API call to get data, assume this is array with contents
data = []
# Set contents of this object to contents of returned array
replace(data)
end
def lookup(query)
each do |hash|
if hash[:key] == query
puts hash[:value]
end
end
end
end
foo = Foo.new
foo.get_value("BAR")