Ранее на #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