Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Duck Typing in Ruby

Alex
August 26, 2013

Duck Typing in Ruby

「Attractive Ruby」is a series of Ruby study video lessons.

link: -> http://edu.51cto.com/lecturer/user_id-140924.html

「诱人的Ruby」QQ群:222359552

Alex

August 26, 2013
Tweet

More Decks by Alex

Other Decks in Programming

Transcript

  1. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ Dynamic Language 1 @张汉东 BASE 07、Duck

    Typing Attractive Ruby Ruby Python 动态 语⾔言 13年8月26⽇日星期⼀一
  2. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ Dynamic Language 1 @张汉东 BASE 07、Duck

    Typing Attractive Ruby Ruby Python Javascript 动态 语⾔言 13年8月26⽇日星期⼀一
  3. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 2 @张汉东 BASE 07、Duck Typing Attractive

    Ruby b = “test” 第⼀一次赋值: 只记录「值」的类型,并不做类型检查 only record, haven’t type-checking, when varibale assigement 13年8月26⽇日星期⼀一
  4. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 2 @张汉东 BASE 07、Duck Typing Attractive

    Ruby b = “test” 第⼀一次赋值: 只记录「值」的类型,并不做类型检查 only record, haven’t type-checking, when varibale assigement 13年8月26⽇日星期⼀一
  5. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 2 @张汉东 BASE 07、Duck Typing Attractive

    Ruby b = “test” variable: No Typing 第⼀一次赋值: 只记录「值」的类型,并不做类型检查 only record, haven’t type-checking, when varibale assigement 13年8月26⽇日星期⼀一
  6. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 2 @张汉东 BASE 07、Duck Typing Attractive

    Ruby b = “test” variable: No Typing 第⼀一次赋值: 只记录「值」的类型,并不做类型检查 only record, haven’t type-checking, when varibale assigement 13年8月26⽇日星期⼀一
  7. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 2 @张汉东 BASE 07、Duck Typing Attractive

    Ruby b = “test” variable: No Typing value : String 第⼀一次赋值: 只记录「值」的类型,并不做类型检查 only record, haven’t type-checking, when varibale assigement 13年8月26⽇日星期⼀一
  8. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 2 @张汉东 BASE 07、Duck Typing Attractive

    Ruby b = “test” variable: No Typing value : String 第⼀一次赋值: 只记录「值」的类型,并不做类型检查 only record, haven’t type-checking, when varibale assigement 13年8月26⽇日星期⼀一
  9. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 2 @张汉东 BASE 07、Duck Typing Attractive

    Ruby b = “test” variable: No Typing value : String variable b => String typing 第⼀一次赋值: 只记录「值」的类型,并不做类型检查 only record, haven’t type-checking, when varibale assigement 13年8月26⽇日星期⼀一
  10. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ Static Language 3 @张汉东 BASE 07、Duck

    Typing Attractive Ruby Java C# 静态 语⾔言 13年8月26⽇日星期⼀一
  11. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ Static Language 3 @张汉东 BASE 07、Duck

    Typing Attractive Ruby Java C# C++ 静态 语⾔言 13年8月26⽇日星期⼀一
  12. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 4 @张汉东 BASE 07、Duck Typing Attractive

    Ruby String b = “test” 编译期就做类型检查 type-checking in complie-time 13年8月26⽇日星期⼀一
  13. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 4 @张汉东 BASE 07、Duck Typing Attractive

    Ruby String b = “test” 编译期就做类型检查 type-checking in complie-time 13年8月26⽇日星期⼀一
  14. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 4 @张汉东 BASE 07、Duck Typing Attractive

    Ruby String b = “test” variable: String Typing 编译期就做类型检查 type-checking in complie-time 13年8月26⽇日星期⼀一
  15. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 4 @张汉东 BASE 07、Duck Typing Attractive

    Ruby String b = “test” variable: String Typing 编译期就做类型检查 type-checking in complie-time 13年8月26⽇日星期⼀一
  16. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 4 @张汉东 BASE 07、Duck Typing Attractive

    Ruby String b = “test” variable: String Typing value : String 编译期就做类型检查 type-checking in complie-time 13年8月26⽇日星期⼀一
  17. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 4 @张汉东 BASE 07、Duck Typing Attractive

    Ruby String b = “test” variable: String Typing value : String 编译期就做类型检查 type-checking in complie-time 13年8月26⽇日星期⼀一
  18. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 4 @张汉东 BASE 07、Duck Typing Attractive

    Ruby String b = “test” variable: String Typing value : String 编译期就做类型检查 type-checking in complie-time No association 没有关联 13年8月26⽇日星期⼀一
  19. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 5 Type-checking in Ruby @张汉东 BASE

    07、Duck Typing Attractive Ruby 类型检查 or 13年8月26⽇日星期⼀一
  20. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 5 Type-checking in Ruby @张汉东 BASE

    07、Duck Typing Attractive Ruby 类型检查 b + 3 or 13年8月26⽇日星期⼀一
  21. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 5 Type-checking in Ruby @张汉东 BASE

    07、Duck Typing Attractive Ruby 类型检查 b + 3 3 + b or 13年8月26⽇日星期⼀一
  22. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 5 Type-checking in Ruby @张汉东 BASE

    07、Duck Typing Attractive Ruby 类型检查 b + 3 3 + b or 13年8月26⽇日星期⼀一
  23. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 5 Type-checking in Ruby @张汉东 BASE

    07、Duck Typing Attractive Ruby 类型检查 b + 3 how to checking ? 3 + b or 13年8月26⽇日星期⼀一
  24. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 6 @张汉东 BASE 07、Duck Typing Attractive

    Ruby class Fixnum def to_str self.to_s end end b + 3 [method]String#+ 13年8月26⽇日星期⼀一
  25. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 6 @张汉东 BASE 07、Duck Typing Attractive

    Ruby class Fixnum def to_str self.to_s end end b + 3 [method]String#+ 13年8月26⽇日星期⼀一
  26. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 6 3.to_str #=> “3” @张汉东 BASE

    07、Duck Typing Attractive Ruby class Fixnum def to_str self.to_s end end b + 3 [method]String#+ 13年8月26⽇日星期⼀一
  27. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 6 3.to_str #=> “3” @张汉东 BASE

    07、Duck Typing Attractive Ruby class Fixnum def to_str self.to_s end end b + 3 checking “to_str” method [method]String#+ 13年8月26⽇日星期⼀一
  28. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 7 @张汉东 BASE 07、Duck Typing Attractive

    Ruby class String def coerce(n) [n.to_s, self] end end 3 + b [method] Fixnum#+ 13年8月26⽇日星期⼀一
  29. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 7 @张汉东 BASE 07、Duck Typing Attractive

    Ruby class String def coerce(n) [n.to_s, self] end end 3 + b [method] Fixnum#+ 13年8月26⽇日星期⼀一
  30. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 7 coerce(3) #=> “3” @张汉东 BASE

    07、Duck Typing Attractive Ruby class String def coerce(n) [n.to_s, self] end end 3 + b [method] Fixnum#+ 13年8月26⽇日星期⼀一
  31. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 7 coerce(3) #=> “3” @张汉东 BASE

    07、Duck Typing Attractive Ruby class String def coerce(n) [n.to_s, self] end end 3 + b checking “coerce” method [method] Fixnum#+ 13年8月26⽇日星期⼀一
  32. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 8 Strong or Weak @张汉东 BASE

    07、Duck Typing Attractive Ruby ‘强’or‘弱’类型 Type 13年8月26⽇日星期⼀一
  33. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 8 Strong or Weak @张汉东 BASE

    07、Duck Typing Attractive Ruby ‘强’or‘弱’类型 Type important? 13年8月26⽇日星期⼀一
  34. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 8 Strong or Weak @张汉东 BASE

    07、Duck Typing Attractive Ruby ‘强’or‘弱’类型 Type important? Ruby 13年8月26⽇日星期⼀一
  35. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 8 Strong or Weak @张汉东 BASE

    07、Duck Typing Attractive Ruby ‘强’or‘弱’类型 Type important? Ruby PHP 13年8月26⽇日星期⼀一
  36. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 9 Explict or Implict @张汉东 BASE

    07、Duck Typing Attractive Ruby 显⽰示or隐式转换 Conversion 13年8月26⽇日星期⼀一
  37. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 9 Explict or Implict @张汉东 BASE

    07、Duck Typing Attractive Ruby 显⽰示or隐式转换 Conversion to_s to_i to_sym coerce ... 13年8月26⽇日星期⼀一
  38. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 9 Explict or Implict @张汉东 BASE

    07、Duck Typing Attractive Ruby 显⽰示or隐式转换 Conversion to_s to_i to_sym coerce ... to_str to_int ... 13年8月26⽇日星期⼀一
  39. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 10 @张汉东 BASE 07、Duck Typing Attractive

    Ruby Like this: Type-checking judge according to the method. 类型检查是根据⽅方法来判断的 13年8月26⽇日星期⼀一
  40. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 10 @张汉东 BASE 07、Duck Typing Attractive

    Ruby Like this: We call it... Type-checking judge according to the method. 类型检查是根据⽅方法来判断的 13年8月26⽇日星期⼀一
  41. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ Duck Typing 11 @张汉东 BASE 07、Duck

    Typing Attractive Ruby Initially coined by Dave Thomas in the Ruby communty! 鸭⼦子 类型 13年8月26⽇日星期⼀一
  42. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ Duck Typing 11 @张汉东 BASE 07、Duck

    Typing Attractive Ruby Initially coined by Dave Thomas in the Ruby communty! 鸭⼦子 类型 13年8月26⽇日星期⼀一
  43. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 12 @张汉东 BASE 07、Duck Typing Attractive

    Ruby other languages support Duck-typing Python 13年8月26⽇日星期⼀一
  44. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 12 @张汉东 BASE 07、Duck Typing Attractive

    Ruby other languages support Duck-typing Python Javascript 13年8月26⽇日星期⼀一
  45. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 13 @张汉东 BASE 07、Duck Typing Attractive

    Ruby But Ruby from the group up to support Duck-typing Ruby⽀支持Duck-typing最彻底 13年8月26⽇日星期⼀一
  46. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 16 @张汉东 BASE 07、Duck Typing Attractive

    Ruby Pseudocode(伪代码) in Static Language, like Java 13年8月26⽇日星期⼀一
  47. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 16 @张汉东 BASE 07、Duck Typing Attractive

    Ruby interface Animal def swimming;end end Pseudocode(伪代码) in Static Language, like Java 13年8月26⽇日星期⼀一
  48. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 16 @张汉东 BASE 07、Duck Typing Attractive

    Ruby interface Animal def swimming;end end Pseudocode(伪代码) in Static Language, like Java class Duck implement Animal def swimming puts “duck swimming” end end 13年8月26⽇日星期⼀一
  49. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 16 @张汉东 BASE 07、Duck Typing Attractive

    Ruby interface Animal def swimming;end end Pseudocode(伪代码) in Static Language, like Java class Duck implement Animal def swimming puts “duck swimming” end end class Goose implement Animal def swimming puts “goose swimming” end end 13年8月26⽇日星期⼀一
  50. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 16 @张汉东 BASE 07、Duck Typing Attractive

    Ruby interface Animal def swimming;end end Pseudocode(伪代码) in Static Language, like Java class Duck implement Animal def swimming puts “duck swimming” end end class Goose implement Animal def swimming puts “goose swimming” end end Animal animal = Duck.new Animal animal = Goose.new animal.swimming 13年8月26⽇日星期⼀一
  51. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 17 @张汉东 BASE 07、Duck Typing Attractive

    Ruby interface Animal def swimming;end end in Ruby 13年8月26⽇日星期⼀一
  52. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 17 @张汉东 BASE 07、Duck Typing Attractive

    Ruby in Ruby class Duck def swimming puts “duck swimming” end end 13年8月26⽇日星期⼀一
  53. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 17 @张汉东 BASE 07、Duck Typing Attractive

    Ruby in Ruby class Duck def swimming puts “duck swimming” end end class Goose def swimming puts “goose swimming” end end 13年8月26⽇日星期⼀一
  54. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 17 @张汉东 BASE 07、Duck Typing Attractive

    Ruby in Ruby class Duck def swimming puts “duck swimming” end end class Goose def swimming puts “goose swimming” end end duck = Duck.new goose = Goose.new [duck, goose].each do |animal| animal.swimming end 13年8月26⽇日星期⼀一
  55. edu.51cto.com 51CTO视频课程 为梦想增值 http://www.ruby-doc.org/ 18 @张汉东 BASE 07、Duck Typing Attractive

    Ruby No Interface in Ruby We have Duck-typing Conclusion 13年8月26⽇日星期⼀一
  56. edu.51cto.com 51CTO视频课程 为梦想增值 19 @张汉东 BASE 07、Duck Typing Attractive Ruby

    Best duck-typing examples In Ruby 13年8月26⽇日星期⼀一
  57. edu.51cto.com 51CTO视频课程 为梦想增值 19 @张汉东 BASE 07、Duck Typing Attractive Ruby

    Best duck-typing examples In Ruby Enumerable 13年8月26⽇日星期⼀一
  58. edu.51cto.com 51CTO视频课程 为梦想增值 19 @张汉东 BASE 07、Duck Typing Attractive Ruby

    Best duck-typing examples In Ruby Enumerable Comparable 13年8月26⽇日星期⼀一
  59. edu.51cto.com 51CTO视频课程 为梦想增值 19 @张汉东 BASE 07、Duck Typing Attractive Ruby

    Best duck-typing examples In Ruby Enumerable Comparable StringIO 13年8月26⽇日星期⼀一
  60. edu.51cto.com 51CTO视频课程 为梦想增值 20 @张汉东 BASE 07、Duck Typing Attractive Ruby

    is_a? kind_of? When we are coding... 13年8月26⽇日星期⼀一
  61. edu.51cto.com 51CTO视频课程 为梦想增值 20 @张汉东 BASE 07、Duck Typing Attractive Ruby

    is_a? kind_of? When we are coding... 13年8月26⽇日星期⼀一
  62. edu.51cto.com 51CTO视频课程 为梦想增值 21 @张汉东 BASE 07、Duck Typing Attractive Ruby

    When we are coding... Readability 13年8月26⽇日星期⼀一
  63. edu.51cto.com 51CTO视频课程 为梦想增值 21 @张汉东 BASE 07、Duck Typing Attractive Ruby

    When we are coding... Readability variable name 13年8月26⽇日星期⼀一
  64. edu.51cto.com 51CTO视频课程 为梦想增值 21 @张汉东 BASE 07、Duck Typing Attractive Ruby

    When we are coding... Readability variable name method name 13年8月26⽇日星期⼀一
  65. edu.51cto.com 51CTO视频课程 为梦想增值 21 @张汉东 BASE 07、Duck Typing Attractive Ruby

    When we are coding... Readability variable name method name params name 13年8月26⽇日星期⼀一
  66. edu.51cto.com 51CTO视频课程 为梦想增值 21 @张汉东 BASE 07、Duck Typing Attractive Ruby

    When we are coding... Readability variable name method name params name ... ... 13年8月26⽇日星期⼀一
  67. edu.51cto.com 51CTO视频课程 为梦想增值 22 @张汉东 BASE 07、Duck Typing Attractive Ruby

    respond_to? you must check typing? Please... 13年8月26⽇日星期⼀一
  68. edu.51cto.com 51CTO视频课程 为梦想增值 22 @张汉东 BASE 07、Duck Typing Attractive Ruby

    respond_to? you must check typing? Please... √ 13年8月26⽇日星期⼀一