将对象属性传递给Ruby类中的函数调用

时间:2018-08-17 05:07:34

标签: ruby class

def printer_outside_class(value)
 puts value
end

class Prints
 attr_accessor :value
 def initialize(a)
   @value = a
 end
 printer_outside_class(@value)
end 

Prints.new(100)

我没有得到任何输出,而是抛出了警告“实例变量@value未初始化”。 Ruby逐行执行该类,因此在调用initialize函数之前,将调用printer_outside_class(value)

是否可以通过某种方式将变量value传递给外部printer_outside_class(@value)函数调用? value应该从外部传递,而不必通过构造函数传递。

注意:我可以随意更改构造函数,可以向Prints类添加任意代码,可以添加新类,并且可以随意调用Prints类。但是,我将无法在函数定义内移动函数调用printer_outside_class(@value)

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,那么解决方法是在类级别使用实例变量:

def printer_outside_class(value)
  puts value
end

class Prints
  @value = 100
  def self.value; @value; end
  def self.value=(neu); @value = neu; end

  def initialize(a)
     self.class.value = a
     printer_outside_class(a)
   end
  printer_outside_class(value)
end

Prints.new(123)