Ruby: Как изменить значение параметра при вызове функции? - PullRequest
9 голосов
/ 15 февраля 2010

Как бы я реализовал функцию в 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 ]

18 голосов
/ 15 февраля 2010

Вы думаете об этом неправильно. Хотя это может быть возможно сделать в 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

Надеюсь, это немного поможет ..

9 голосов
/ 15 февраля 2010

Вы хотите сделать это:

def change_me(val)
  val.replace "#{val}!"
end

Это заменит значение новым. Но поверьте мне: вы обычно не хотите разрабатывать свой код ruby ​​таким образом. Начните думать об объектах и ​​классах. Создайте свой код без побочных эффектов. Это избавит вас от многих неприятностей.

3 голосов
/ 15 февраля 2010

Что за объект 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...