== , === , eql? , equal?比方像上面這四個不知道想搞死誰
==
https://ruby-doc.org/core-2.2.0/Method.html#method-i-3D-3D應該是最常用的一個,可以用來判斷到底值是不是一樣。
浮點數和小數會自動轉換,所以下面這個會是true
1 == 1.0 #=> true
但是不會幫你轉換數值和字串,所以下面是false(記得javascript的話這樣是true)1 == "1" #=>false
eql?
https://ruby-doc.org/core-2.2.0/Method.html#method-i-eql-3F基本上和==大部分的時候都是一樣的動作,但對於數字的行為不一樣
1.eql? 1.0
=> false
看起來如果只是要比較兩邊值一不一樣的時候用==就好了,如果需要更嚴謹一點的判斷,比方說hash內部用來判斷key到底一不一樣的時候就是用eql?equal?
檢查是不是同一個objectcat1 = 'cat'
cat2 = 'cat'
puts cat1.object_id # => 70301044011860
puts cat2.object_id # => 70301043992280
puts cat1.equal?(cat2) # => false
puts cat1.equal?(cat1) # => true
===
嗯…不同地方作用不一樣的樣子,感覺有點討厭(?!)case裡面用來比較的方法就是用===,所以下面這兩個是相等的
case x
when A
puts "AAAA"
when B
puts "BBBB"
else
puts "meow~"
end
if A === x
puts "AAAA"
if B === x
puts "BBBB"
else
puts "meow~"
end
如果是數值或是字串的話行為和==是一樣的,不過還有一些不一樣的情形#たのしいruby裡面的範例
p /zz/ === "xyzzy" #=> true
p String === "xyzzy" #> true
p (1..3) === 2 #=> true
如果有些錯的地方麻煩各位大大可以指正我Written with StackEdit.
沒有留言:
張貼留言