2011-09-01 4 views
1

이전에 #ruby의 누군가는 변수 이름이 이미 로컬로 정의되어 있지 않으면 @name과 self.name을 사용할 필요가 없다고 말했습니다. 행복하게 배워서 제 코드를 좀 더 깔끔하게 만들 것입니다. 놀고, 몇 가지 클래스를 조정 한 후에 서브 클래스에서 @name을 초기화 한 후 이름에 액세스 할 수 없다는 것을 알았습니다.@name = 부모 클래스에 attr_accessor를 설정했을 때 값과 이름이 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") 

다음은 실패
https://github.com/mojombo/jekyll/blob/master/lib/jekyll/page.rb

내가 조금 왜 이름 것이라고 혼란 스러워요 :

require "pp" 

module Jekyll 
    class MyPages < Page 

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

    end 
end 

클래스가이 수퍼 클래스를 도청 이 인스턴스에서는 작동하지 않지만 처음에는 작동합니까?

더 많은 정보 :이 루비 버전

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 

답변

2

입니까? 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("","","") 
+0

해당 게시 및 테스트 내가 잘못하고 있었는지보고 내 자신의 방법을 찾고 갔다 나를 위해 일한, 그리고 루비 1.9.2 내가, 그것을보고 있었다 인정하고 싶은 것보다 더 똑똑한 것 같다 후 나중에 나는 실수로'@ name' setter를 사용하는 대신 이름을 설정했다. 그 실수를'@ name' setter를 사용하여 고친 후에 모두 매력처럼 작동했다! 감사합니다. 그리고 저를 도와 주신 것에 대한 신뢰를 얻으 셨습니다 : P –