2013-12-24 49 views
0

有人可以幫助newb嗎?我遇到了錯誤;沒有方法錯誤,來自不同類的調用方法,傳遞參數

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

我想在ruby中調用帶.method_name的方法嗎?
是因爲我的初始化方法不正確?沒有正確傳遞參數?

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 

我的課,我稱之爲FROM - ADMIN.RB

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

我不會看到'需要'管理員行。 – vgoff

+0

或者'需要'ADMIN'',因爲它在呼叫上限。 – vgoff

+0

但是,在完成之後,您需要在其存在的類的實例上調用該方法。 – vgoff

回答

2

您正在設置@new_game類裏面。您正在嘗試使用您的班級的OUIDIDE。變量作用域不允許你這樣做。

你想要做的就像下面這樣。

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'爲主:對象(NameError) 〜/編碼/ 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'爲主:對象(NameError)〜/編碼/ TicTacToe: - – user2817130

+0

是的,我更新了答案,因爲你實際上不需要將任何* _對象傳遞給初始值設定項。 – Bartosz