我想知道如何指定循环块参数的对象类型。
基本上,我希望能够说:
my_collection = MyCollection.new
my_collection.each do |my_collection_object|
# how can I call method1 and method2 of my_collection_object?
my_collection_object.method1
my_collection_object.method2
etc...
end
我认为我应该将自己的迭代循环方法(#each)编写到我自己的集合类中,但由于我是一个完整的菜鸟,我无法弄清楚从哪里开始。请给我指导。谢谢你的帮助!
编辑:
我想进一步澄清我的不理解。为了完成上面的我有下面的类,我想返回MyCollection
对象的#each方法块参数。
如果我只是从上面的代码段中调用method1和method2,它会自动知道在哪里查找method1和method2吗?它是如何做到的? (对不起,如果原始问题稍有改动)
class My_Collection_Object
def method1
...
end
def method2
...
end
end
答案 0 :(得分:0)
您不必担心将类型信息传递到块中,因为Ruby使用Duck Typing。
在duck typing中,程序员只关心确保对象在给定的上下文中按行为要求行事,而不是确保它们属于特定类型。
这意味着您不必担心将类型传递到块中,因为Ruby解释器将知道该方法是否在运行时存在。如果您尝试对未定义这些方法的类型使用method1
和method2
,则只会抛出异常。