ruby-on-rails - ruby instance_variable_get 返回 nil

标签 ruby-on-rails ruby

我的 instance_variable_get 方法有问题,因为它总是用我的对象实例之一返回 nil 对象。 这是我的代码:

logger.info "ASDF: " + @d_tree.inspect
logger.info "ASDF: " + @d_tree.instance_variable_get(:@content);

输出是:

ASDF: #<DTree id: 11, parent_id: nil, content: "bababababa", subsidiary_info: "", deep_info: "blabla", title: "hello", direction: 1, created_at: "2010-10-26 19:27:32", updated_at: "2010-11-01 23:14:31", color: 2, cell_color: 2, howtoinfo: "howtoinfooo", textinfo: "textInfooo", locationinfo: "locationInfoooo", productinfo: "productinfoooo">
TypeError (can't convert nil into String):
    /app/controllers/d_trees_controller.rb:38:in `+'

根据检查对象似乎没问题,但 instance_variable_get 返回一个 nil 对象

感谢您的帮助!

最佳答案

instance_variable_get(arg)

如果没有设置实例变量,它应该返回实例变量的值或者nil

例如

我们定义了下面的类

  class Velpradeep
    def initialize(mark1, mark2)
      @m, @s = mark1, mark2
    end
end

在创建类对象的过程中

obj = Velpradeep.new(98,96)

然后我们可以使用以下方法访问实例变量:

irb(main):046:0> obj.instance_variable_get(:@m)
=> 98

访问初始化方法中定义的未定义实例变量

irb(main):047:0> obj.instance_variable_get(:@p)
=> nil # provides nil bcz the instance variable is not defined 

如果你想在你需要设置实例变量之前访问变量

instance_variable_set()

例子:

irb(main):048:0> obj.instance_variable_set(:@p, 99)
=> 99

然后我们就可以使用了,它会返回实例变量的值....

irb(main):049:0> obj.instance_variable_get(:@p)
=> 99

关于ruby-on-rails - ruby instance_variable_get 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4078321/

相关文章:

ruby-on-rails - 迁移 : change column from integer to string

ruby-on-rails - 在 Heroku 上运行 Ruby/Rails 应用程序的浏览器没有 "Destroy"确认

javascript - asset pipeline rails 3.1 是否浪费周期?

ruby - 在 ubuntu 14.04 上运行 jekyll 时出错

Ruby 检查集合中的至少一个元素是否满足条件

ruby - 如何为 gem 创建模块?

ruby-on-rails - 查找数组的每个子数组包含的值

ruby-on-rails - 在 Rails 4 中使用具有间隙的 fixture 进行单元测试用户模型

ruby - 如何在 Ruby 上使用 Xively API 库?

ruby-on-rails - 为特定的 mysql 客户端版本安装 mysql2 gem?