【问题标题】:Ruby: class passes methods of running objectRuby:类传递运行对象的方法
【发布时间】:2023-03-22 11:40:02
【问题描述】:

我有一个类,我在其中创建了一个名为 @client 的新实例变量,它本身就是一个对象。现在,在另一个文件中,我从这个类创建了一个对象,但无法访问 @client 对象的方法。我该怎么办?

示例:

class A_Helper
    def initialize
        @client = Module::Client.new('info')
        p @client
        # <Module::Client:0x000000017fd018>
    end
end
---------------------------
class A_Controller
    @A_Helper = A_Helper.new
    p @A_Helper.client
    # <class:A_Controller>: undefined method `client' for nil:NilClass

【问题讨论】:

  • 一个minimal reproducible example 会很好。
  • 添加了一个可能有帮助的示例
  • 仍然无法重现 that 错误。鉴于您显示的代码,@A_Helper 不能为零。

标签: ruby sinatra helper


【解决方案1】:

你已经声明了一个局部变量@client,它只能在你的类中访问。如果你想从外部获得访问权限,你需要声明 getter 或快捷方式,例如 attr_accessor/attr_reader(请查看 post)。

class A_Helper
  attr_reader :client

  def initialize
    @client = Module::Client.new('info')
  end
end

【讨论】:

  • 它可以访问对象,但我仍然无法执行 A_helper.client.Method(),因为它说“nil:NilClass 的未定义方法‘客户端’”编辑:抱歉,没有说清楚在示例中,我试图调用客户端中的方法
猜你喜欢
  • 2011-09-04
  • 1970-01-01
  • 2021-04-28
  • 2014-04-03
  • 2011-11-28
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多