2014-07-23 143 views
1

我對編程非常陌生,並且正在努力學習Ruby。目前我無法理解方法。我uderstand是:Ruby中的object.method(a,b)和方法(a,b)有什麼區別

方法允許我執行的代碼塊,而無需重寫,這樣的方法是這樣的:

example_method 

參數允許我值傳遞到該走的方法中的代碼代替方法中定義的佔位符。這樣我可以用不同的輸入執行一組代碼。帶參數的方法如下:

example_method(x , y) 

但是我很困惑對象上某個方法的實例究竟在做什麼。例如:

object.example_method(x, y) 

這是什麼意思?爲什麼將該方法附加到具有句點符號的對象?我們是否這樣做,以便我們可以參考實例/類變量我們的方法中的對象?有沒有其他的理由來做到這一點?

對於如果示例:

def example_method(x , y) 
    x * y 
end 

object.exaple_method(a , b)是一樣的example_method(a , b)

感謝您的任何幫助,抱歉,如果我不清楚。

+0

記住編輯您的帖子,並正確格式的代碼。 – Neeku

+0

對不起,謝謝! – Cu1ture

回答

2

Ruby是一種Object Oriented語言。這意味着對象不僅有成員(=狀態),而且還有方法(=行爲)。當您在對象上調用某個方法時(該對象稱爲調用者),運行的方法是對應於此對象的類型行爲的的方法。

當您調用沒有調用者的方法時,self隱含地是調用者。來自irb,self被認爲是main,或全球範圍。

例子:

def my_method(a) 
    "#{a} from main" 
end 

class A 
    def my_method(a) 
    "#{a} from A" 
    end 
end 

class B 
    def my_method(a) 
    "#{a} from B" 
    end 
end 

a = A.new 
b = B.new 

my_method(1) 
# => "1 from main" 
a.my_method(1) 
# => "1 from A" 
b.my_method(1) 
# => "1 from B" 
+0

謝謝!現在開始點擊。如果調用者沒有本地範圍方法,它會繼承全局範圍方法嗎? – Cu1ture

+1

@ Cu1ture試圖在對象類型中不存在的對象上調用方法將導致「未定義的方法」錯誤 –

+0

感謝您的答覆,當調用沒有調用者的方法時,正在考慮的程序的整個內容該方法正在調用的對象呢? – Cu1ture

0

如果我認爲正確的東西你問它是一個類的方法VS

def Object 
    def self.example_method(x, y) 
    #this is a class method 
    x * y 
    end 

    def example_method(x,y) 
    #this is an instance method 
    x * y 
    end 
end 

現在,我們已經他們在這裏定義的實例方法就是我們如何給他們打電話

#This called the class method 
Object.example_method(3,3) => 9 

#To call the instance method we have to have an instance 
object = Object.new 
object.example_method(3,3) => 9 
+0

感謝您的回覆,它更多的是我不明白在對象上調用的方法和在對象上未調用的方法之間的區別。 – Cu1ture

+0

@ Cu1ture:方法總是在對象上調用。如果你沒有明確地指定一個接收者,那麼接收者隱含地是'self'。 –

相關問題