【问题标题】:@name = value and name being nil when attr_accessor is set in parent class@name = 在父类中设置 attr_accessor 时,值和名称为零
【发布时间】:2011-09-01 02:29:05
【问题描述】:

之前在#ruby 上有人告诉我,除非变量名已经在本地定义,否则我不需要使用@name 和 self.name,我很高兴知道这会使我的代码更整洁。在玩弄并调整了我的一些类之后,我注意到在子类的初始化中设置 @name 后我无法访问名称(它是 nil)。

以下作品:

module EnvyGeeks
  class Attributes

    attr_accessor :persons_name

    def initialize(name)
      @persons_name = name
    end

  end
end

module EnvyGeeks
  class MyAttributes < Attributes

    def initialize(name)
      @persons_name = name
      puts persons_name
    end

  end
end

envygeeks = EnvyGeeks::MyAttributes.new("Jordon")

以下失败:

require "pp"

module Jekyll
  class MyPages < Page

    def initialize(site, base, page)
      @name = page.split("/")
      pp name # => nil
    end

  end
end

该课程继承了这个超级课程:
https://github.com/mojombo/jekyll/blob/master/lib/jekyll/page.rb

我有点困惑,为什么 name 在这种情况下不起作用,但一开始却起作用?

更多信息:

From: ./pages.rb @ line 19 in Jekyll::MyPages#initialize:

    14:     def initialize(site, base, page)
    15:       @site = site
    16:       @dir  = "/"
    17:       @base = base
    18:       
 => 19:       binding.pry
    20:       @name = page.split("/")
    21:       if name.length > 1
    22:         name.pop if name.last =~ /index.html$/
    23:         name = name.join("/") if name.length > 1


pry(#<Jekyll:Page @name=nil>)> @name = page.split("/") => ["index.html"]
pry(#<Jekyll:Page @name=["index.html"]>)> name => nil

【问题讨论】:

    标签: ruby jekyll


    【解决方案1】:

    这是哪个版本的 Ruby?在 1.9.2 上它工作正常。

    require 'jekyll'
    require 'pp'
    
    module Jekyll
    
      class TestPage < Page
        def initialize(site,base,page)
          @name = "test"
          puts name # => test
          pp name # => "test"
        end
      end
    
    end
    
    a = Jekyll::TestPage.new("","","")
    

    【讨论】:

    • 在你发布了这个并且你的测试对我有用之后,我去寻找我自己的方法来看看我做错了什么,似乎 ruby​​ 1.9.2 比我想承认的更聪明,它后来看到我不小心设置了名称而不是使用@name setter ...在修复了使用@name setter 的错误之后,这一切都像魅力一样一起工作!谢谢,你因帮助我而受到赞誉:P
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多