Share
Embed
Transcript
42 slides
-
Copyright © Kakaku.com Inc. All Rights Reserved. ࣗݾհ ాɹᠳʢͳ͕ͨɹ͠ΐ͏ʣ •
మಓܥSIerͰSEΛ7 • 20189݄ʹΧΧΫίϜೖࣾ • όοΫΤϯυΤϯδχΞͱͯ͠৯ϩάͷϚΠΫϩαʔϏε ԽΛਪਐத • Ruby / Railsྺ5ϲ݄ • ݸਓతʹMachine LearningBlockchain৮ͬͨΓ • ͖ͳݴޠPython • ϚϥιϯͬͨΓΪλʔͬͨΓғޟͬͨΓ • 2ࣇͷ ˏs_naga03 Sho Nagata nagata03 -
Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄ࠒͷ͜ͱ ݱࡏͷॲཧ༰ͷௐࠪ ϝιουΛݕࡧʢϝιου໊Ͱgrepͱ͔ʣ
ϝιου͕ݟ͔ͭΓ·ͤΜʂ ίίʹ͋Γ·͢Αɻ -
Copyright © Kakaku.com Inc. All Rights Reserved. Rubyྺ1ϲ݄͝Ζͷ͜ͱ ԿॲͰ͔͢ʁ Ͳ͜Ͱ͔͢ʁ
υίʂʁ ίίˣ def method_missing(…) # … …… end -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missing • BasicObjectΫϥεʹఆٛ͞Ε͍ͯΔprivateͳΠϯελϯεϝιου
BasicObject.private_instance_methods.grep(/^method/) => [:method_missing] • ݺͼग़͞Εͨϝιου͕ɺܧঝπϦʔΛḷͬͯ୳ࡧͨ݁͠ՌͲ͜ʹ ఆٛ͞Ε͍ͯͳ͔ͬͨ߹ɺmethod_missing͕ݺͼग़͞Ε NoMethodErrorΛൃੜͤ͞Δ -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ class Sample
def method_missing(name) puts “͋ͳͨΰʔετϝιου #{name} ϝιουΛݺͼग़͠·ͨ͠” end end sample = Sample.new sample.ghost #=> ͋ͳͨΰʔετϝιου ghost ϝιουΛݺͼग़͠·ͨ͠ -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ • ΰʔετϝιουrespond_to?ͰfalseͱͳΔ
sample = Sample.new sample.ghost #=> ͋ͳͨΰʔετϝιου ghost ϝιουΛݺͼग़͠·ͨ͠ sample.respond_to?(:ghost) #=> false -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ • respond_to?ϝιουͰtrueΛฦ͢Α͏ʹ͢Δʹ
respond_to_missing?ϝιουʢObjectΫϥεͷprivateΠϯελϯε ϝιουʣΛΦʔόʔϥΠυ͠Α͏ -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ class DS
def get_keyboard_info(computer_id); end end class Computer def initialize(id, data_source) @id = id @data_source = data_source end def method_missing(name) @data_source.send(“get_#{name}_info, @id end def respond_to_missing?(method, include_private = false) @data_source.respond_to?(“get_#{method}_info”) || super end end -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ class Roulette
def method_missing(name, *args) person = name.to_s.capitalize 3.times do number = rand(10) + 1 puts “#{number}…” end “#{person} got a #{number}” end end -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ class Roulette
def method_missing(name, *args) person = name.to_s.capitalize 3.times do number = rand(10) + 1 puts “#{number}…” end “#{person} got a #{number}” end end -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ class Roulette
def method_missing(name, *args) person = name.to_s.capitalize super unless %w[Bob Frank Bill].include? person number = 0 3.times do number = rand(10) + 1 puts “#{number}…” end “#{person} got a #{number}” end end -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ • طଘͷϝιουΛݺͼग़͢Մೳੑ
• undef ϒϥϯΫεϨʔτ ͰରԠ -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ irb(main):002:0> cmp
= Computer.new(@id, DS.new) (Object doesn't support #inspect) => -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ irb(main):002:0> cmp
= Computer.new(@id, DS.new) (Object doesn't support #inspect) => irb(main):003:0> cmp.class NoMethodError (undefined method `class' for #<Computer: 0x00007fdc2d0e7a70>) -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ “BasicObjectrespond_to?ϝιουΛ͍࣋ͬͯͳ͍ɻ ʢதུʣ
respond_to_missing?ϝιου͕ෆཁʹͳΔͷͰɺআՄೳͩɻ” ʢϝλϓϩάϥϛϯάRuby ୈ2൛ 3ষΑΓʣ -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷࠇຐज़ͬΓ irb(main):003:0> cmp.respond_to?(:keyboard)
NoMethodError (undefined method `respond_to?' for #<Com puter:0x00007fdc2d0e7a70>) -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ • ఆٛ͞Ε͍ͯͳ͍ϝιουʢΰʔετϝιουʣΛݺͼग़ͤΔΑ͏ʹͳΔ
• ΰʔετϝιουʹ͍ͭͯrespond_to?ͰtrueΛฦ͢Α͏ʹ͍ͨ͠ͳΒ respond_to_missing?ϝιουΛΦʔόʔϥΠυ͠Α͏ • super ΛΕͣʹ • طଘͷϝιουΛݺͼग़ͯ͠͠·͏ՄೳੑΛΕͣʹ -
Copyright © Kakaku.com Inc. All Rights Reserved. method_missingͷΦʔόʔϥΠυ • ఆٛ͞Ε͍ͯͳ͍ϝιουʢΰʔετϝιουʣΛݺͼग़ͤΔΑ͏ʹͳΔ
• ΰʔετϝιουʹ͍ͭͯrespond_to?ͰtrueΛฦ͢Α͏ʹ͍ͨ͠ͳΒ respond_to_missing?ϝιουΛΦʔόʔϥΠυ͠Α͏ • super ΛΕͣʹ • طଘͷϝιουΛݺͼग़ͯ͠͠·͏ՄೳੑΛΕͣʹ -
Copyright © Kakaku.com Inc. All Rights Reserved. ࠷ޙʹ We are
hiring! WEBɺΞϓϦɺϑϩϯτΤϯυΤϯδ χΞͳͲ༷ʑͳ৬छͰΤϯδχΞืू தͰ͢ʂ ΧδϡΞϧ໘ஊʢΦϑΟε๚ʣܴ Ͱ͢ʂ