@name = значение и имя равны нулю, когда attr_accessor установлен в родительском классе - PullRequest
1 голос
/ 01 сентября 2011

Ранее на #ruby кто-то сказал мне, что мне не нужно использовать @name и self.name, если имя переменной уже не определено локально, что, как я был рад узнать, сделает мой код немного более аккуратным, как я думал. После игры и настройки нескольких моих классов я заметил, что не могу получить доступ к имени (это ноль) после установки @name в initialize в подклассе.

Следующие работы:

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

Я немного запутался, почему имя не будет работать в этом случае, но в первом случае оно работает?

Дополнительная информация:

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

1 Ответ

2 голосов
/ 01 сентября 2011

Какая версия 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("","","")
...