2013-12-20 63 views
0

所以我是一個java程序員,我試圖在ruby上變得更好,但是我在基本原理上失敗並且沒有獲得任何地方。這裏是我的類找不到ruby函數的定義

class Main 
     a = Car.new 
     a.instance_variable_set("@make", 'Hyundai') 

     if a.make == 'Hyundai' 
     self.get_hyundai_vehicle_information(a) 
     end 

     def get_hyundai_vehicle_information(a) 
     go_to_hyundai_usa_and_select_vehicle 
     end 
    end 

但我不斷收到錯誤

undefined method 'get_hyundai_vehicle_information' for Main:Class

+0

您需要提供完整的代碼才能重現問題。這段代碼是不夠的 –

+0

你正在類聲明中運行它,並且該方法還沒有被定義。當你在*類聲明期間做事時,訂單很重要。 –

+0

只需在聲明完成後調用'get_hyundai_vehicle_information'即可。並將其定義爲'def self.get_hyundai_vehicle_information' –

回答

2

你在類體中運行的代碼在singleton類的Main類的上下文中執行。這基本上意味着,它在類的創建期間在類範圍內運行一次,但不在任何類實例中運行。

現在您定義的方法僅適用於實例(即它是一個實例方法)。您可以通過將self.添加到方法名稱來定義類方法。然後,您需要先定義方法,然後才能調用它。

請記住,在Ruby中,每段代碼都按順序進行評估。這包括類和方法的定義。在定義它的代碼已經運行之前,你不能調用一個方法。