2012-06-21 2 views
2

나는 수업의 작동 방식과 이해 방법을 이해하지만 연습 문제의 2 번째 추가 학점은 2 개의 다른 파일로 2 개의 클래스 버전을 만드는 것이라고 말합니다. ... Ruby the Hardway를 배우십시오. 42. 2 개의 파일로 된 2 클래스

나는 다른 일을 시도,하지만 난 그것을 작동하게하는 방법을 알아낼 수 없습니다

내가 올바른 장소에서 검색 아니에요 경우 나도 몰라,하지만 난 찾을 수 없습니다 http://ruby.learncodethehardway.org/book/ex42.html

내가 그렇게 시도하는 것 : 누군가가 나를 도울 수 있다면, 그것은 많이 주시면 감사하겠습니다

: 여기

을 그에 도움이 없으며, 모든 솔루션을 찾을합니다 ... exercice입니다 멀리 :

map.rb 
class Map 

with all the methods in here (death(), central_corridor(), etc.) 

engine.rb 
class Engine 
require './map.rb' 

    def initialize(start) 
    @quips = [ 
     "You died. You kinda suck at this.", 
     "Nice job, you died... jackass.", 
     "Suck a luser." 
    ] 

    @start = start 
    puts "in init @start = " + @start.inspect 
    end 

    def prompt() 
    print "> " 
    end 

    def play() 
    puts "@start => " + @start.inspect 
    @next_room = @start 

    while true 
     puts "\n--------" 
     room = method(@next_room) 
     @next_room = room.call() 
    end 
    end 

end 

a_game = Engine.new(:central_corridor) 
a_game.play() 

그래서 기본적으로 내가 무슨 짓을했는지 등 게임의 "행동"(객실, 죽음, 사용 방법을 얻을 .. 그리고지도의 클래스의지도에 넣어이다. rb를 호출 한 다음 engine.rb를 호출합니다. 여기에는 프롬프트, 재생, 시작과 같은 "일반"메소드/변수가있는 클래스 엔진이 있습니다.

내가 오류가 나는 그것이 루비 클래스 엔진의 방법 "central_corridor"를 찾습니다 의미 이해

engine.rb:24:in `method': undefined method `central_corridor' for class `Engine' 

이지만 map.rb의 클래스 맵에 있고 난 알아낼 수 없습니다 무엇을 할 것인가, 몇 가지 변수를 수정하거나 몇 가지 추가 할 것 : ... (

+1

시도한 내용과 시도에서 얻은 오류 메시지를 포함하도록 게시물을 편집 할 수 있습니까? – sarnold

+0

엔진 클래스의 내부에 map 클래스를''요구하지 마라. 클래스 선언 앞에 놓는다. 그러나'Engine' 인스턴스 메소드 ('Engine' 선언 안에'def'를 통해 정의)는'Engine' 인스턴스를 실행해야합니다. –

+0

실행하려면 Engine 인스턴스가 필요하다는 것은 무엇을 의미합니까? 2 파일에서 2 클래스를 갖는 연습의 전체 요점은 엔진에있는 동안지도의 인스턴스를 사용하는 것입니다 ... – Jauny

답변

2

문제는 당신이 전화 할 수 있어야합니다 클래스 Map의 인스턴스가 없다는 것입니다 central_corridor. 이것을 initialize에 추가 :

@map=Map.new 

room = method(@next_room)[email protected](@next_room)으로 변경하십시오. 이 질문에 isen't 있지만


, 난 당신이 방법 클래스의 모든 메소드를하고 바로 클래스를 사용하는 것이, Map가 변경되지 않을 경우 (당신이지도에있는 모든 방법을)하는 느낌이 Map 귀하의지도. 하지만 좋은 디자인 원칙에 따라지도에 Hash의 람다를 나타내는지도를 만들어야합니다. 그런 식으로 두 개 이상의지도를 만들 수 있습니다.

+0

고마워, 문제는 해결되었습니다! 하지만 다른 문제가 있습니다. 반대쪽입니다. /Users/Jonathan/Hardway/map.rb:20:in'central_corridor ': # (NoMethodError)에 대해 정의되지 않은 메소드'prompt' 감사합니다. – Jauny

+0

@ 재니 : 도와 줘서 기뻐요.문제를 해결하는 답을 찾으면 투표 수 아래의 수표를 클릭하여 답을 수락 할 수 있습니다. – Linuxios

+0

@Jauny :'Map.central_corridor' 메소드의 반환 값은 무엇입니까? 매번'': prompt' '를 반환합니까? – Linuxios