我有一个自定义类,希望能够覆盖赋值运算符.
这是一个例子:
@H_502_15@解决方法
这是一个例子:
class MyArray < Array attr_accessor :direction def initialize @direction = :forward end end class History def initialize @strategy = MyArray.new end def strategy=(strategy,direction = :forward) @strategy << strategy @strategy.direction = direction end end
这目前不按预期工作.使用时
h = History.new h.strategy = :mystrategy,:backward
[:mystrategy,:backward]被赋值给策略变量,方向变量保持:forward.
重要的部分是我想为方向参数分配一个标准值.
任何线索,使这项工作高度赞赏.
由于名称以…结尾的方法的语法糖,您实际上可以将多个参数传递给该方法的唯一方法是绕过语法糖并使用send …
h.send(:strategy=,:mystrategy,:backward )
h.set_strategy :mystrategy,:backward
但是,如果您知道数组从不符合参数,则可以重写方法以自动取消排列值:
def strategy=( value ) if value.is_a?( Array ) @strategy << value.first @strategy.direction = value.last else @strategy = value end end
这似乎是对我的一个严重的骇客.如果需要,我将使用带有多个参数的非分配方法名称.
另一个建议:如果唯一的方向是:向前和向后:
def forward_strategy=( name ) @strategy << name @strategy.direction = :forward end def reverse_strategy=( name ) @strategy << name @strategy.direction = :backward end