在#ruby之前,有人告诉我,我不需要使用@name和self.name,除非变量名已经在本地定义,我很高兴地了解到这会让我的代码更整洁一些。在尝试并调整了一些类之后,我注意到在子类的initialize中设置了@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发布于 2011-09-01 11:17:10
这是哪个版本的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("","","")https://stackoverflow.com/questions/7265557
复制相似问题