2009-11-28 94 views

回答

9

你需要在课堂上做到这一点。像这样:

class Whatever 
    attr_accessor :roles 
    def initialize 
    @roles = [] 
    end 
end 

你真的不可能有一个<<roles方法。您必须拥有支持<<运营商的roles访问者。

编辑:我更新了代码。现在你可以看到<<运营商应该如何超载,但你也可以做roles<<部分。下面是它的一小部分用法:

w = Whatever.new 
w << "overload for object called" 
# and overloads for the roles array 
w.roles << "first role" 
w.roles << "second role" 
+1

在您的解决方案中w.roles不会调用重写的<<方法。它只是调用@roles属性中的<未覆盖的属性。您可以通过在覆盖的<<方法中添加一个puts行来测试这个问题,您会看到'w <<“1”转储puts输出,但w.roles <<“2”不会转储那个puts输出。 – jaydel 2012-05-23 19:13:53

+0

@jaydel,你是对的。我更新了代码。 – Geo 2012-05-23 19:34:48