Rubyベストプラクティスを読んでいても「何だ、これ?」なことがたくさんあります。
この前書いた inject もそうでしたが、そのうち何回も出会いそうなので記録を残しておきます。
クラスのインスタンス変数
2章にこんなコードが出てきます:class SortedList
def initialize
@data = []
end
end
この時の @data のように冒頭に @ が一つついたものはインスタンス変数です。
(
ちなみに
変数名の冒頭に @@ でクラス変数、 $ でグローバル変数、何もつけないのがローカル変数になります。これで変数のスコープがおおよそ決まりますが、(特にローカル変数に関して)関数定義やコードブロックなどもう少し細かくスコープの区切りがある模様です。
変数の初期化
3章にこんなコードが出てきました:@hidden_methods ||= {}展開すると、意味が透けて見えてきます:
@hidden_methods = @hidden_methods || {}Ruby の評価規則では、
- 二項演算子 || は
- 第一項を評価した値が nil または false の場合、第二項を評価し、その評価した値を返す
- 第一項を評価した値が nil または false 以外の場合、第一項を評価した値を返す
- 条件文を評価する際、nil または false 以外の値はすべて true と同等とみなす
なので、@hidden_methods が未定義である = nil である場合は、第二項の {} で初期化されます。たぶん。
0 件のコメント:
コメントを投稿