0
define_method :hash_count do 
  hash = ''
  hash << 'X' while hash.length < 25
  hash # returns the hash from the method
end

puts hash

私は期待していました

XXXXXXXXXXXXXXXXXXXXXXXX

画面に出力します。代わりに、次のような奇妙な乱数を取得します

3280471151433993928

-1945829393073068570

誰か説明してくれませんか?Ruby でのスコーピングは、PHP/Javascript よりも奇妙に思えます!

4

2 に答える 2

1

こんにちは:) これを試してください:

def hash_count
  hash = ''
  hash << 'X' while hash.length < 25
  hash # returns the hash from the method
end

puts hash_count

を呼び出しました。hashこれは と同じself.hashです。メソッドの詳細については、ドキュメントを参照してください。hash注: (文字列) はメソッド スコープで定義されているため、メソッドの外側はメソッド内の (文字列)hashと同じではありません。hashhash

注:を引き続き使用することもできますdefine_method :hash_count doが、ここで見たコードからは、simple のdef hash_count方が読みやすくなっています。

于 2013-05-02T14:14:43.190 に答える