我如何在红宝石中阻止一个函数,如下所示?
change_me! (val)
更新:
我打算这样做:
def change_me! (val)
val = val.chop while val.end_with? '#' or val.end_with? '/'
end
这最终只是......
change_me! 'test#///' => "test#///"
答案 0 :(得分:18)
你正在考虑这个错误的方法。虽然可以在Ruby中执行此操作,但它会过于复杂。正确的方法是:
val.change_me!
当然,这取决于您想要改变的类别。重点是,按照惯例,方法有'!'影响它们被调用的类实例。 所以......
class Changeable
def initialize var
@var = var
end
def change_me! change=1
@var += change
end
end
a = Changeable.new 5 # => New object "Changeable", value 5
a.change_me! 6 # => @var = 7
a.change_me! # => @var = 8
希望这有点帮助..
答案 1 :(得分:9)
你想这样做:
def change_me(val)
val.replace "#{val}!"
end
用新值替换值。但请相信我:你通常不想以这种方式设计你的ruby代码。开始考虑对象和类。设计没有副作用的代码。它会省去很多麻烦。
答案 2 :(得分:3)
val
是什么类型的对象,您想如何更改它?如果你只是想改变一个对象(比如一个数组或一个字符串),那么你要求的就是直接工作:
def change_me!(me)
me << 'abides'
end
val = %w(the dude)
change_me!(val)
puts val.inspect
val = "the dude "
change_me!(val)
puts val.inspect