a 3 p a #=> 0 4 end 1 case [0, 1] 2 in [_, _] 3 :reachable 4 end ม໊Λ@ʹ͢ΔͱɺϚον͢Δ͚Ͳ ΞαΠϯ͠ͳ͍ 1 a = 0 2 case 1 3 in ^a # means `in 0` 4 :unreachable 5 end #=> NoMatchingPatternError ͢Ͱʹଘࡏ͢ΔมͷΛ͍͍ͨ߹ɺ ?Λ͏ &MJYJSͷQJOԋࢉࢠ
do 2 def deconstruct 3 puts '`deconstruct` is called' 4 to_a # [red, green, blue] 5 end 6 end 7 8 class Color2 < Color; end 9 10 case Color[0, 10, 0] 11 in Color2[0, a, 0] # not called because type is different 12 puts "Color2" 13 in [0, a, 0] 14 puts "Matched with array: #{a}" # => 10 15 in Color[0, a, 0] # => `deconstruct` is called 16 puts "Matched with Color: #{a}" # => 10 17 end ෦తʹɺEFDPOTUSVDU͕ ฦ͢"SSBZΦϒδΣΫτΛݩ ʹύλʔϯϚον͍ͤͯ͞ Δɻ ͳͷͰɺಠࣗͷ$PMPSΫϥε ͷΦϒδΣΫτΛύλʔϯ Ϛονͤ͞Δ͜ͱՄೳʂ ͍͢͝ʂ ຊՈεϥΠυͰɺߏจΛॲཧ͢Δ3VCZ7."CTUSBDU4ZOUBY5SFF/PEFʹEFDPOTUSVDUΛ࣮ͨ͠Β 1PXFS"TTFSU͕࣮Ͱ͖ͪΌ͏తͳ͜ͱ͕ॻ͍ͯ͋Δʢཧղෆʣ
2 def deconstruct_keys(keys) 3 puts "`deconstruct_keys` is called with keys #{keys}" 4 { name: name } 5 end 6 end 7 8 case Person.new('a', 30) 9 in name: # => `deconstruct_keys` is called with keys [:name] 10 p name # => 'a' 11 end ෦తʹɺ EFDPOTUSVDU@LFZTͷLFZʹରԠ ͢ΔLFZWBMVFΛؚΉϋογϡ ͕ฦΕϚονͤ͞Δ͜ͱͰ ͖Δɻ ͳͷͰɺಠࣗͷ1FSTPOΫϥεͷ ΦϒδΣΫτΛύλʔϯϚον ͤ͞Δ͜ͱՄೳʂ ͍͢͝ʂ \OBNFOBNF^ͷ4ZOUBY4VHBS