Ruby:如何在循环块参数中指定类

时间:2014-05-06 08:40:21

标签: ruby

我想知道如何指定循环块参数的对象类型。

基本上,我希望能够说:

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

1 个答案:

答案 0 :(得分:0)

您不必担心将类型信息传递到块中,因为Ruby使用Duck Typing

  

在duck typing中,程序员只关心确保对象在给定的上下文中按行为要求行事,而不是确保它们属于特定类型。

这意味着您不必担心将类型传递到块中,因为Ruby解释器将知道该方法是否在运行时存在。如果您尝试对未定义这些方法的类型使用method1method2,则只会抛出异常。