实例变量在函数中传递和修改

时间:2014-03-09 16:46:59

标签: ruby jekyll liquid

如何将实例变量作为参数传递给函数? 例如:

@tmp = "blabla"
...
my_function(@tmp)

@tmp应该是“你好”

def my_function(foo)
foo = "hello"
end

注意:我改变了标题的措辞!

2 个答案:

答案 0 :(得分:1)

@temp不应该像你那样“打招呼”。如果你要更新@tmp,我会改变my_function的工作方式:

def my_function
    'hello'
end

@tmp = "blabla"
...
@tmp = my_function

Ruby是一种“按值传递”的语言。这可能有助于解释它比我更好:https://www.ruby-forum.com/topic/41160

基本上你的my_function只是在函数中分配foo“hello”,然后返回foo,但不会重新分配传入的对象。

答案 1 :(得分:0)

您的问题有点不明确,但看起来您想要进行一些动态属性分配。

class Test
  attr_accessor :foo

  def initialize
    @foo = "asdf"
  end

  def my_function(var, set_to = "hello")
    self.instance_variable_set(var, set_to)
  end
end

用法:

t = Test.new # t.foo is "asdf"

t.my_function(:@foo) # t.foo is "hello"

t.my_function(:@foo, "bananas") # t.foo is "bananas"

值得注意的是,您必须传递my_function 符号,表示您想要动态更改的变量,而不是变量本身。