(Ruby에서 작업 중) 먼저, 미리 사과드립니다. 나는 프로그래머가 아니기 때문에 편리함과 변화하는 세계로 간다. 필자가 프로그래밍에 참여하기 위해 필요한 것은 무엇이며, 다른 사람들이 내 프로그래밍을 위해 기다리는 것에 지쳐있었습니다. 따라서, 나는 그 동안의 기본 개념을 놓쳤다. 나는이 질문들을 할 때 때로는 결과에 의해 나 자신을 어리 석다.부모 클래스 초기화 된 변수를 자식 클래스의 인스턴스에 전달
클래스에서 종/직업 관계를 정의하고 싶다고합시다. 나는 슈퍼 클래스 "BlackAnt"를 정의하고 서브 클래스 "노동자", "파이터"와 "여왕"나에게
을 갖고 싶어, 직관적으로,이는 다음과 같이 보입니다 :
class BlackAnt
@legs = 6
end
class Worker < BlackAnt
@jaws = 'small'
end
을하지만 난 다음
을 시도하는 경우ant1 = Worker.new
puts ant1.legs
오류가 발생했습니다. 내가 클래스 BlackAnt을 개정하는 경우에 :
class BlackAnt
attr_accessor :legs
@legs = 6
end
ant1.legs 반환 '전무'나는 방법이 여기에 설명하려고했습니다
: http://railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/
을하고이 돌아 Worker.legs 수 '6' 하지만 ... 아아 :
ant1 = Worker.new
Worker.legs => '6'
ant1.legs => 'nil'
추측에, 그 부모 변수의 값은 새로운 아이가 양산 될 때마다 초기화되지 않습니다.
나는 어쩐지 이것에 대해 어리 석음을 느낍니다. 그리고 그 대답은 의심 할 여지없이 카페인에 이끌려 모든 밤을 발견 한 날을 저주하게 만들 것입니다.
ant1 = Worker.new
ant2 = Queen.new
ant3 = Fighter.new
을하고 각각의 하위 클래스에 할당 된 특별한 어떤 특성과 함께, 다리의 적절한 양을 취득해야 : 내가 뭘해야 내가 그렇게 같은 객체를 생성 할 수 있도록 일을 준비합니다. 작업자/퀸/전투기 분류는 실제 통화가 될 것입니다 있도록 네임 스페이스에 구속됩니다
ant1 = AntBlack::Worker.new
ant2 = AntRed::Worker.new
ant3 = AntRed::Queen.new
등
그때 개인의 다리의 양을 확인할 수 있도록하고 싶습니다개미 사용 : 내 엄지 손가락에 도착하기 위해 내 팔꿈치 주위에 갈 수
ant1.legs #=> 6
. 그렇다면 동일한 결과를 달성 할 수있는 방법에 대한 제안을 자유롭게 주시면 통찰력을 높이 평가하겠습니다.
/// 업데이트 재 : 응답 ///
class AntRed
attr_accessor :legs
def initialize
@legs = 6
end
end
class Worker < AntRed
@strength = 1
end
결과 :
irb(main):009:0> ant1 = Worker.new
#=> #<Worker:0x87616ac @strength=1>
irb(main):010:0> ant1.legs
#=> nil
감사를 회신 -이 없습니다, 그러나, 해상도 것으로 보인다. 여기에 코드 블록을 넣을 수 없으므로 그에 따라 질문을 편집 할 것입니다. –
Worker 클래스에도 initialize 메서드를 추가 한 경우 super를 호출해야합니다. 나는 그 문제에 대해 내가 의미하는 것을 보여주기 위해 나의 대답을 편집했다. – cbascom
지금은 초기화되지 않고 초기화 된 상태입니다. 나는 초기화되지 않은 버전이 왜 작동하지 않는지 궁금해지기를 너무 피곤하다. (내가 다시로드하기 전에 Ctrl + S를 누르는 것을 잊어 버린 5 달러), 나는 너에게 무언가를 깊이 고맙게 생각하고 술 취한 하마처럼 잠들 것이다. . –