Rubyのお話です。
次の処理を実行するとどうなるでしょうか?
"name" == "name"
=> true
もちろん、trueですね。
では、次の処理を実行するとどうなるでしょうか?
#equal?メソッドはオブジェクトIDが同じときtrueを返す
"name".equal?("name")
=> false
trueになると思いましたが違うみたいです。
ということは、左辺の"name"と、引数の"name"は違うオブジェクトになっているみたいです。
では、次の場合はどうなるでしょうか?
str1 = "name"
str2 = "name"
str1.equal?(str2)
=> false
ではでは、次の場合はどうなるでしょうか?
str1 = "name"
str2 = str1
str1.equal?(str2)
=> true
ようやく、trueが返ってきました。
ちなみに、NETで似たようなことをやると、Trueが返ってきます。
string str1 = "name"
string str2 = "name"
str1.Equals(str2)
=> True
確か、.NETでは同じ文字リテラル"name"が存在する場合は、同じ場所を参照していたはず。
#そうですよね?
けど、Rubyの場合は違うみたいですね。
まぁよくよく考えれば、1行1行その時に解釈して実行しているんだから
同じ文字リテラルでも、違うオブジェクトになるのはしかたがないのか。
投稿日時 : 2007年7月19日 21:02