2011-11-27 126 views
3

我通過七種編程語言讀七週內的問題之一規定:一個方法裏面自我的意義是什麼?

你會如何改變/返回0如果分母爲零?

我第一次嘗試定義我自己/並進行代理其執行原來的/方法是這樣的:

Number oldSlash := Number getSlot("/") 
Number/= method(x, Number oldSlash(x)) 

然而,這不是爲我工作。做了一些Google搜索之後,我發現了一段類似的代碼。我發現的代碼在執行該方法時使用了self。所以,我嘗試使用self,它似乎只是很好地工作:

Number oldSlash := Number getSlot("/") 
Number/= method(x, self oldSlash(x)) 

我的問題是:爲什麼這個工作的時候關鍵字self被使用,它爲什麼不能當Number來代替工作?

回答

4

短的版本:

Number是一個 「基類」 對數;不是實際的數值。你不能用它來進行數學運算。 self表示您的方法被調用的對象,這就是您想要在分區中用作分子的數字。

較長的版本:

首先,一些背景:司如你所知有兩個參數。您定義的方法只需要一個參數(x)。另一個參數是隱含的,它是您調用分區的數字。爲了清楚起見,當你在編寫a/b時,方法/在對象a上被調用,並且它被傳遞值b作爲參數。用更像C的語言,你會說類似a.divide(b)。您不通過a作爲參數,但它可以從函數訪問,如self

因此,使用我們從上面知道的,寫作self oldSlash(x)執行使用self作爲分子和x作爲分母的除法。當您調用「newSlash」方法時,設置值爲self,再次隱式調用您調用該方法的對象。如果您熟悉JavaScript,則self是Io的名稱,代表this

當您改爲寫Number oldSlash(x)時,您使用對象Number作爲分部中的分子。 Number不是實際的數字,而是所有數字的「基類」。它沒有價值。因此你不能對它進行數學運算。

+0

噢噢噢。我應該意識到,在我自己...感謝您的答案! – Josh

0

Io Programming Guide

所有方法(除了新)具有結構(「對象」)作爲 第一個參數的變量被命名爲「自我」。

但你可以省略self,是隱式的:

Number oldSlash := Number getSlot("/") 
Number/= method(x, oldSlash(x)) 
相關問題