使用局部变量作为参数调用类方法

时间:2016-02-19 14:11:25

标签: ruby

我想将变量中的字符串从方法传递给另一个类。我有这段代码:

class A
  def method_a
    variable = "some string"
    B.method_b(variable)
  end
end

class B
  def self.method_b(parameter)
    puts parameter
  end
end  

此代码生成以下错误:

Undefined local variable or method `variable`

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您在此处定义的是一种实例方法,只能在B实例上运行:

class B
  def self.class_only(v)
    puts "Class: #{v}"
  end

  def instance_only(v)
    puts "Instance: #{v}"
  end
end

class_only方法不需要实例:

B.class_only(variable)

instance_only方法必须对实例进行操作:

b = B.new
b.instance_only(variable)

现在通过参数给出B方法的任何内容都是有效的,A方面的任何本地或实例变量都是可以提供给调用的东西。这里没有范围问题,因为你明确地传递了它们。

例如:

class A
  def test
    variable = SecureRandom.hex(6)
    B.class_only(variable)
  end
end

A.new.test