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

Zom*_*ies 10 ruby

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

change_me! (val)
Run Code Online (Sandbox Code Playgroud)

更新:

我打算这样做:

def change_me! (val)
  val = val.chop while val.end_with? '#' or val.end_with? '/'
end
Run Code Online (Sandbox Code Playgroud)

这最终结果......

change_me! 'test#///'     => "test#///" 
Run Code Online (Sandbox Code Playgroud)

Tre*_*oke 18

你正在考虑这个错误的方法.虽然可以在Ruby中执行此操作,但它会过于复杂.这样做的正确方法是:

val.change_me!
Run Code Online (Sandbox Code Playgroud)

当然,这取决于您想要改变的类别.重点是,按照惯例,方法有'!' 影响它们被调用的类实例.所以...

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
Run Code Online (Sandbox Code Playgroud)

希望这个对你有帮助..

  • 这不适用于所有参数类型,例如数组或散列 (3认同)

hur*_*n77 9

你想这样做:

def change_me(val)
  val.replace "#{val}!"
end
Run Code Online (Sandbox Code Playgroud)

这将使用新值替换该值.但请相信我:你通常不想以这种方式设计你的ruby代码.开始考虑对象和类.设计没有副作用的代码.它会省去很多麻烦.