&&を使った際の =~演算子 と match?メソッドの違い

aa = "abc333333"
bb = "333abc333333"

puts aa =~ /abc/ && bb =~ /abc/

puts aa =~ /abc/ && bb =~ /^abc/

puts bb =~ /^abc/ && aa =~ /xxx/

puts aa.match?(/abc/&& bb.match?(/abc/)

puts aa.match?(/abc/&& bb.match?(/^abc/)

puts bb.match?(/^abc/&& aa.match?(/xxx/)

このようにコードを書いてみた。すると

 

$ ruby practice.rb

3

 

 

true

false

false

 

このように出力された

なぜ

puts aa =~ /abc/ && bb =~ /abc/

は3と出力されるのだろうか

ここで

aa = "abc333333"
bb = "333abc333333"

puts aa =~ /abc/ && bb =~ /abc/

puts aa =~ /abc/ || bb =~ /abc/

こうコードを書いてみた。

すると

i$ ruby practice.rb

3

0

と出力された

どうやら && の方では数字が大きい方、 || の方では数字が小さい方が出力されるらしい。

 

ここでif文を使ってみてどの場合がtrueンビなるのかを確かめてみた

aa = "abc333333"
bb = "333abc333333"

puts aa =~ /abc/ && bb =~ /abc/

puts aa =~ /abc/ || bb =~ /abc/

if aa =~ /abc/ && bb =~ /abc/
  puts "hello"
else
  puts "miss"
end

if aa =~ /abc/ || bb =~ /abc/
  puts "hello"
else
  puts "miss"
end

if aa =~ /abc/ && bb =~ /^abc/
  puts "hello"
else
  puts "miss"
end

すると

$ ruby practice.rb

3

0

hello

hello

miss

と出力された。

 

どうやら何か数字が出力さえされていればtrue扱いになるらしい