fc2ブログ

2023.11 «  - - - - - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - - - - - - » 2024.01
TOP > メソッド名を呼ぶときにメソッド名の前に付けるのはピリオドなのかコロンコロンなのか

 ← 1バイトで符号付き整数を表す | TOP | ひらがなの「あ」と表示する6つの方法

メソッド名を呼ぶときにメソッド名の前に付けるのはピリオドなのかコロンコロンなのか 

2009年09月10日 ()
rubyのメソッド名をコールする際に、メソッド名の前にピリオド(.)を付けるのか、コロンコロン(::)を付けるのか、訳が分からなかったので実験をしてみました( @ ruby1.8.7 )

結論。

メソッド名の1文字目が小文字の場合はピリオドとコロンコロンのどちらでもよい。
メソッド名の1文字目が大文字の場合は複雑なルール。基本ピリオドにしとけ。そうするとコロンコロンのクラススコープの定数呼び出しから区別し易い。



以下実験結果をほとんど解説なしで書いてみます。

# メソッド
class Nikuman
    def my_name # その1
    #def self.my_name # その2
    #def Nikuman.my_name # その3
    #def Nikuman::my_name # その4
        puts "肉まん"
    end
end

niku = Nikuman.new



# クラススコープの変数
class Nikuman
    my_name = "肉まん" # その5・クラススコープの変数
end

niku = Nikuman.new



■メソッド名の1文字目が小文字(上記の例だと「my_name」の部分)
○:エラーが出なくて「肉まん」と表示された
×:エラーが出た

その1その2その3その4その5
Nikuman::my_name××
Nikuman::my_name()××
Nikuman.my_name××
Nikuman.my_name()××
niku::my_name××××
niku::my_name()××××
niku.my_name××××
niku.my_name()××××



■メソッド名の1文字目が大文字(上記の例だと「my_name」を「MyName」と書き換えた場合)
○:エラーが出なくて「肉まん」と表示された
×:エラーが出た

その1その2その3その4その5
Nikuman::MyName××××
Nikuman::MyName()××
Nikuman.MyName××
Nikuman.MyName()××
niku::MyName×××××
niku::MyName()××××
niku.MyName××××
niku.MyName()××××


【広告】

[2009.09.10(Thu) 09:29] Rubyの文法Trackback(0) | Comments(2)
↑TOPへ


COMMENT

ちょっと違うような by takahashim
「クラス定数」というのは、間違いです。Rubyには「クラス定数」という、通常の定数とは違う何かがあったりすることはありません。「その5」の例はNikumanクラスのクラススコープでローカル変数を定義しているだけです。

Nikuman::nameとかNikuman.nameとかは、Nikumanクラスの中でdef nameしない限り、もともとClassクラスのnameメソッドが呼ばれているはずです。

とりいそぎ。

全然違っててすみません by 自分
takamashim さんお久しぶりです。そしてご指摘ありがとうございます。
すっかりnameメソッドが継承元クラスにあることを忘れてましたorz
ですので、nameメソッドの箇所をmy_nameメソッドに書き換えて、よりポイントを絞って書いてみました。
そして、クラス定数というのを改め、クラススコープの定数やらクラススコープの変数やらに書き換えました。

大変勉強になります。

ところでhatenaでご紹介の「ふつうのコンパイラをつくろう」本はとても面白そうですね。目次を見るだけでwktkします。

コメントを閉じる▲
 ← 1バイトで符号付き整数を表す | TOP | ひらがなの「あ」と表示する6つの方法

COMMENT

「クラス定数」というのは、間違いです。Rubyには「クラス定数」という、通常の定数とは違う何かがあったりすることはありません。「その5」の例はNikumanクラスのクラススコープでローカル変数を定義しているだけです。

Nikuman::nameとかNikuman.nameとかは、Nikumanクラスの中でdef nameしない限り、もともとClassクラスのnameメソッドが呼ばれているはずです。

とりいそぎ。
[ 2009.09.11(Fri) 14:08] URL | takahashim #- | EDIT |

takamashim さんお久しぶりです。そしてご指摘ありがとうございます。
すっかりnameメソッドが継承元クラスにあることを忘れてましたorz
ですので、nameメソッドの箇所をmy_nameメソッドに書き換えて、よりポイントを絞って書いてみました。
そして、クラス定数というのを改め、クラススコープの定数やらクラススコープの変数やらに書き換えました。

大変勉強になります。

ところでhatenaでご紹介の「ふつうのコンパイラをつくろう」本はとても面白そうですね。目次を見るだけでwktkします。
[ 2009.09.15(Tue) 01:01] URL | 自分 #RaJW5m0Q | EDIT |

COMMENT POST















管理者にだけ表示

 ← 1バイトで符号付き整数を表す | TOP | ひらがなの「あ」と表示する6つの方法