我有一个类似的课程:
Railsapp / LIB / five9_providers / record_provider.rb:
class Five9Providers::RecordProvider < Five9Providers::BaseProvider
def add_record_to_list
variable = 'test'
end
end
然后,在控制器中我有这个:
Railsapp /应用/控制器/ five9_controller.rb:
class Five9Controller < ApplicationController
def import
record_provider = Five9Providers::RecordProvider.new()
record_provider.add_record_to_list
puts Five9Providers::RecordProvider::variable
end
end
但是,调用我的控制器方法import
只会返回:
NoMethodError (undefined method 'variable' for Five9Providers::RecordProvider:Class)
如何从variable
课程的recover_provider.rb
课程中访问five9_controller.rb
?
编辑:
即使在我的@@variable
和我的record_provider
中使用five9_controller
,我仍然无法访问该变量。我这样称呼它:puts @@variable
。
答案 0 :(得分:1)
正如所写,你不能。 variable
是实例方法的本地方法,并且不能通过方法外部的任何Ruby表达式访问。
在相关点上,术语“类变量”通常用于表示@@variable
形式的变量。
更新:为响应您的“修改”声明,如果您在班级中将variable
更改为@@variable
,则可以使用从外部访问该变量的技术这个类,但@@variable
的裸参考不是其中之一。仔细阅读the question you cited in your comment的答案以获取更多信息。
答案 1 :(得分:0)
最好的方法是使用方法设置和获取值。以下是示例代码
class Planet
@@planets_count = 0
def initialize(name)
@name = name
@@planets_count += 1
end
def self.planets_count
@@planets_count
end
def self.add_planet
@@planets_count += 1
end
def add_planet_from_obj
@@planets_count += 1
end
end
Planet.new("uranus")
Plant.add_planet
obj = Planet.new("earth")
obj.add_planet_from_obj