Ruby:如何在函数调用中更改参数的值?

时间:2010-02-15 14:07:13

标签: ruby

我如何在红宝石中阻止一个函数,如下所示?

change_me! (val)

更新

我打算这样做:

def change_me! (val)
  val = val.chop while val.end_with? '#' or val.end_with? '/'
end

这最终只是......

change_me! 'test#///'     => "test#///" 

3 个答案:

答案 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