2013-12-24 2 views
0

누군가 newb를 도울 수 있습니까? 나는 그 오류를 얻고있다.메서드 없음 오류, 다른 클래스의 메서드 호출, 인수 전달

: undefined method `computer_name' for nil:NilClass (NoMethodError) 

나는 루비에서 메서드를 .method_name이라고 부름니까?
내 initialize 메서드가 올바르지 않아서입니까? 인수를 올바르게 전달하지 않습니까? 나는에서 호출 AM

load 'admin_logic.rb' 
load 'computer_logic.rb' 
load 'user_logic.rb' 

class TicTacToe 
    def initialize(admin_object, computer_object, user_object) 
    admin_object = Admin.new 
    computer_object = ComputerLogic.new 
    user_object = UserLogic.new 
    @new_game = TicTacToe.new(admin_object, computer_object, user_object) 
    end 
end 

puts "Hello, I\'m " + @new_game.computer_name + ", let\'s play Tic Tac Toe! What is your name?" 

puts "Great " + @new_game.user_name + ", you\'ll be " + @new_game.user_sign + ". Please choose where you want to go." 

puts 'The game board is the following, please remember!' 
puts ' a1 | a2 | a3' 
puts " --- --- ---" 
puts ' b1 | b2 | b3' 
puts " --- --- ---" 
puts ' c1 | c2 | c3' 

@new_game.user_sign 
@new_game.computer_sign 
@new_game.game_board 
@new_game.winning_propositions 

while @new_game .computer_win != true do 
    @new_game.user_turn 
    @new_game.draw_game_outcome 
    @new_game.player_first_turn_check? 
    @new_game.draw_game_outcome 
end 

MY CLASS - ADMIN.RB

class Admin 
    def computer_name 
    @computer_name = "Watson" 
    end 
end 
+0

나는 'require'admin'' 라인을 보지 못했습니다. – vgoff

+0

아니면 전화 캡에 있기 때문에'ADMIN '을 요구합니다. – vgoff

+0

하지만 그 작업이 끝나면 그 클래스가 존재하는 클래스의 인스턴스에서 해당 메서드를 호출해야합니다. – vgoff

답변

2

당신은 클래스의 INSIDE@new_game을 설정하고 있습니다. 반의 OUTSIDE을 사용하려고합니다. 변수 범위는 이것을 허용하지 않습니다.

다음과 같이하면됩니다.

class TicTacToe 
    def initialize(admin_object, computer_object, user_object) 
    admin_object = Admin.new 
    computer_object = ComputerLogic.new 
    user_object = UserLogic.new 
    end 
end 

@new_game = TicTacToe.new(admin_object, computer_object, user_object) 

그러면 정의 된 메소드를 사용할 수있는 TicTacToe 클래스의 인스턴스가 생성됩니다.

+0

나는 이것을 시도했고 오류가 발생했다. : 정의되지 않은 지역 변수 또는 메소드'admin_object 'for main : Object (NameError) ~/coding/TicTacToe : – user2817130

+0

당신은 객체 지향 프로그래밍, Ruby의 가변 스코프, 그리고 아마도 여러분의 에러를 읽을 필요가 있다고 생각합니다. –

0

이렇게하면 개체가 작동하지 않습니다. 귀하의 이니셜 라이저가 스스로를 호출하여 시작합니다.

더 나은 출발점이 될,하지만 OOP에 대한 몇 가지 기본적인 독서를 할 시간이 걸릴하시기 바랍니다 수 있습니다

class Admin 
    def name 
    "Watson" 
    end 
    alias_method :to_s, :name 
end 

class TicTacToe 
    attr_reader :admin_object, :computer_object, :user_object 

    def initialize 
    @admin_object = Admin.new 
    @computer_object = ComputerLogic.new 
    @user_object = UserLogic.new 
    end 
end 

@new_game = TicTacToe.new 

체크 아웃 일부 자습서를, 예를. https://www.ruby-lang.org/en/documentation/quickstart/2/

+0

왜 이런 오류가 발생하는지 알 수 있습니까? : 정의되지 않은 지역 변수 또는 메소드'admin_object 'for main : Object (NameError) ~/coding/TicTacToe : - – user2817130

+0

그래, 실제로 * _ 객체를 이니셜 라이저에 전달할 필요가 없으므로 조금 대답을 업데이트했다. – Bartosz