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