這是一直困擾着我的東西。當我看到在文本打印任何Ruby方法,它通常表現爲:爲什麼Ruby文檔中的方法前面有散列符號?
Class#method
或
#method
現在,我會用:
Class.method
爲什麼所有的Ruby方法前面加一個英鎊符號?有什麼理由嗎?只是好奇。
這是一直困擾着我的東西。當我看到在文本打印任何Ruby方法,它通常表現爲:爲什麼Ruby文檔中的方法前面有散列符號?
Class#method
或
#method
現在,我會用:
Class.method
爲什麼所有的Ruby方法前面加一個英鎊符號?有什麼理由嗎?只是好奇。
注意到,公約是:
Class#method
而不是
object#method
在代碼中你會object.method
,如果object
是的class
一個實例。代碼中不使用#
約定。
使用::用於描述描述實例方法和使用類方法,#。例如代碼。
是的,對不起,班#方法。謝謝。 – 2009-04-09 23:57:45
我知道#並未在代碼中使用,但它爲什麼被使用? – 2009-04-09 23:58:49
該鏈接似乎已生鏽,但引用了足夠的內容以讓我找到當前源:http://ruby-doc.org/documentation-guidelines.html – 2011-10-03 18:21:07
上述所有你的答案列出正確。有一兩件事我想補充的是,你說的文檔的風格,你會perfer
Class.method
將與類的方法很容易混淆。既然你可以使用上述語法調用類的方法在紅寶石:
class Foo
def self.say_hi
puts "hi"
end
end
Foo.say_hi # => prints "hi"
的#符號被用來指規範instance
方法,像String#upcase
。這個。符號用於指代特定實例的方法,如mystring.upcase
。這種區分並不意味着存在一個類方法'upcase'。
我剛剛意識到,沒有其他答案觸及問題的最微不足道的方面:爲什麼#
標誌?
我有兩個理論:
#sym
(而不是:sym
),因爲它們是在Ruby中。所以,如果你想指的方法對象(相對於調用的方法),那麼你會打電話像Array >> #new.
(該>>
本身就是返回傳遞給它的方法等。因此,在紅寶石這將是Array.method :new
。)在Smalltalk中的文檔,方法通常被稱爲Class>>method
,但在紅寶石會更有意義上,不同之處在於它與Class::method
容易混淆。因此,選擇了Class#method
。#
是在Ruby中的註釋字符。一個明確的答案只能由誰發明了一種慣例給出。如果有人發明了編程紅寶石書,這將是要麼戴夫·托馬斯或安迪·亨特,但我有點懷疑。這本書出版於2001年,Ruby於1993年開始,他們在那之前是如何提到方法的?
這在JS version of this question中提到,但似乎有可能是這種命名法came from JavaDoc,其中散列標記直接翻譯爲頁內參考,例如, href="Component.html#getComponentAt(int, int)"
heff的答案(我不能評論,因爲缺乏聲譽),Ruby遵循JavaDoc的例子,是我認爲最好的猜測。 JavaDoc設計者需要或需要一種方法來從類限定符(他們使用散列)中區分程序包限定符(它們使用點)。 JavaDoc中的@see和@link標籤語法如下:
@see package.class#member [optional label]
{@link package.class#member [optional label]}
見JavaDoc's package.class variant of the @see tag文檔和JavaDoc中的@link標籤,這heff已經指出的文檔。
在JavaDoc中,包名通常可以省略,所以只剩下Class#成員部分,這看起來與Ruby相同,因爲Java代碼像Ruby一樣使用Class.member語法,即 。
找到爲什麼JavaDoc設計者需要不同的語法會很有趣,而Java編譯器在兩個目的上都可以很好地使用點。
它什麼時候追溯到何時? – nafg 2016-11-02 05:19:39