これはしばらくの間私を悩ませてきたものです。 Rubyメソッドがテキストで印刷されているのを見ると、通常は次のように表示されます。
Class#method
または
#method
今、私は使用します:
Class.method
すべてのRubyメソッドの前にポンド記号が付いているのはなぜですか?理由はありますか?ただ興味があります。
rdoc docs から:
クラス名、ソースファイル、およびアンダースコアまたはの前にハッシュ文字が含まれるメソッド名は、コメントテキストから説明に自動的にハイパーリンクされます。
(強調が追加されました。)
規則は次のとおりです。
Class#method
のではなく
object#method
コードでは、object.method
、object
がclass
のインスタンスだった場合。 #
規則はコードでは使用されません。
から RDocドキュメント :
::を使用してクラスメソッドを記述し、#を使用してインスタンスメソッドを記述し、を使用します。たとえば、コード。
#表記は、String#upcase
のような正規のinstance
メソッドを参照するために使用されます。 。表記は、mystring.upcase
などの特定のインスタンスのメソッドを参照するために使用されます。この区別は、クラスメソッド「upcase」が存在することを意味しないように行われます。
他の答えのどれも質問の最も些細な側面に触れていないことに気づきました:なぜ#
記号?
私には2つの理論があります:
#sym
ではなく):sym
でシンボルが記述されるSmalltalkに由来する可能性があります。したがって、メソッドに参照(呼び出しメソッドではなく)オブジェクトにしたい場合は、Array >> #new.
( >>
は、それ自体が渡されたメソッドを返すメソッドです。したがって、RubyはArray.method :new
になります。)Smalltalkのドキュメントでは、メソッドは一般にClass>>method
と呼ばれますが、Ruby Class:method
は、Class::method
と簡単に混同されることを除いて、より理にかなっています。したがって、Class#method
が選択されました。#
がRubyのコメント文字であるため、単に選択されたというものです。決定的な答えは、その慣習を発明した人だけが与えることができます。 Programming Rubyの本のために発明されたとしたら、それはDaveThomasかAndyHuntのどちらかでしょうが、私はそれを疑っています。この本は2001年に出版され、Ruby 1993年に始まりましたが、それ以前はどのようにメソッドを参照していましたか?
上記のすべての答えは正しいです。私が追加する1つのことは、あなたが好むと言ったドキュメントスタイルです
Class.method
クラスメソッドと簡単に混同されます。上記の構文を使用してRubyでクラスメソッドを呼び出すことができるため:
class Foo
def self.say_hi
puts "hi"
end
end
Foo.say_hi # => prints "hi"
これは この質問のJSバージョン で言及されましたが、おそらくこの命名法 JavaDocから来た ハッシュマークがページ上の参照に直接翻訳されているようです。 href="Component.html#getComponentAt(int, int)"
RubyがJavaDocの例に従っているという、heffの答え(評判が悪いためコメントできません)は、私の見解では最良の推測です。 JavaDocの設計者は、パッケージ修飾子(ドットを使用)とクラス修飾子(ハッシュを使用)を区別する方法を必要としていたか、望んでいました。 JavaDocの@seeおよび@linkタグの構文は次のようになります。
@see package.class#member [optional label]
{@link package.class#member [optional label]}
@ seeタグのJavaDocのpackage.classバリアント のドキュメントと、heffがすでに指摘しているJavaDocの@linkタグのドキュメントを参照してください。
JavaDocでは、パッケージ名を省略できることが多く、Class#member部分のみが残ります。これは、JavaコードがRubyと同じようにClass.member構文を使用するため、Rubyと同じように奇妙に見えます。します。
Javaコンパイラが両方の目的でドットを使用しても問題なく動作するのに対し、JavaDoc設計者が異なる構文を必要とした理由を見つけるのは興味深いことです。