2017年5月11日 星期四

到多有多少個“等於”?_?

程式裡面總是有很多長得很像的東西
== , === , 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?

檢查是不是同一個object
cat1 = '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.

沒有留言:

張貼留言