30分鐘技術分享         Ruby小觀念&技巧 By Bruce Li          2012/04/09          雲端線上科技股份有限公司12年4月11日星期三
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
self是誰              • 代表當前的object              • 在最上層時,則為預設(main)12年4月11日星期三
規則              程式區塊             範例        self代表                          (method外)        main              最上層區塊       ...
最上層區塊                 main                 main12年4月11日星期三
Class內12年4月11日星期三
Class內                                 bje ct)                  C             o                           ass也是           ...
Class內                                 bje ct)                  C             o                           ass也是           ...
Class內                                  bje ct)                   C             o                            ass也是        ...
singleton method                    #<Object:0x007fd79b84f448>12年4月11日星期三
singleton method                    #<Object:0x007fd79b84f448>                               =                            ...
singleton method                    #<Object:0x007fd79b84f448>                               =                            ...
module內                   M12年4月11日星期三
module內                                M                          #<C:0x007fa8fb04e970>                            stance ...
應用在宣告class method                       兩者都可以!                       因為self此時代表M                       用self的好處是更名時方便     ...
class也是object                       內建的                                      Klass                                      Cl...
呼叫method時                  省略小數點(.)              • 即是送訊息給self物件12年4月11日星期三
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先12年4月11日星期三
同名時12年4月11日星期三
同名時12年4月11日星期三
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先12年4月11日星期三
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先              • 不過打從⼀一開始就不應該取成同...
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先              • 不過打從⼀一開始就不應該取成同...
呼叫等號結尾的method               Ruby的syntax sugar12年4月11日星期三
呼叫等號結尾的method                  Ruby的syntax sugar              X                  nil12年4月11日星期三
呼叫等號結尾的method               Ruby的syntax sugar               nil12年4月11日星期三
呼叫等號結尾的method               Ruby的syntax sugar               nil12年4月11日星期三
呼叫等號結尾的method               Ruby的syntax sugar               nil               30    √12年4月11日星期三
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
Symbol跟String的不同              • 內容相同的symbol都代表同⼀一個物件              • 無法改變symbol的內容              • symbol效率比string好,很適合拿來當  ...
代表同⼀一個物件        1.9.2p290 :001 > "a".equal?("a")         => false        1.9.2p290 :002 > :a.equal?(:a)         => true 12...
”equal?”的解說              • equal? 判斷是否指到同⼀一個object              • eql? 判斷是否value與type都相同              • == 判斷value是否相同(因此1...
無法改變symbol的內容        1.9.2p290 :001 > "a" + "b"         => "ab"        1.9.2p290 :002 > :a + :b        NoMethodError: unde...
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
Ruby的自省能力              • 自省:檢查某些事物以確定它是什麼、               它知道什麼以及它能做什麼。12年4月11日星期三
• class # "str".class => String              • is_a? # "str".is_a?(String) => true              • superclass # String.supe...
• protected_methods              • private_methods              • public_methods              • public_instance_methods   ...
• respond_to?              • 應用:                x = :talk                if obj.respond_to?(x)                    obj.__se...
只顯示在該class定義的          methods:加上false                 [:dm, :cm, :nil?, :===, :=~, :!                 ~, :eql?, :hash, :<...
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
each with index12年4月11日星期三
each with index  √12年4月11日星期三
end12年4月11日星期三
廣告              雲端線上徵Rails/iOS/Android工程師中               ‣ inside job board              我的技術&生活雜事部落格               ‣ http...
Upcoming SlideShare
Loading in …5
×

001 Ruby小觀念與小技巧

1,211 views
1,131 views

Published on

self是誰
symbol與string的不同
淺談Ruby的自省能力
Bonus小技巧:each_with_index

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,211
On SlideShare
0
From Embeds
0
Number of Embeds
346
Actions
Shares
0
Downloads
19
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

001 Ruby小觀念與小技巧

  1. 1. 30分鐘技術分享 Ruby小觀念&技巧 By Bruce Li 2012/04/09 雲端線上科技股份有限公司12年4月11日星期三
  2. 2. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  3. 3. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  4. 4. self是誰 • 代表當前的object • 在最上層時,則為預設(main)12年4月11日星期三
  5. 5. 規則 程式區塊 範例 self代表 (method外) main 最上層區塊 def m main class C C class內 def self.m C def m C的instance singleton def obj.m obj module M M module內 def m 混入M的物件12年4月11日星期三
  6. 6. 最上層區塊 main main12年4月11日星期三
  7. 7. Class內12年4月11日星期三
  8. 8. Class內 bje ct) C o ass也是 ( cl12年4月11日星期三
  9. 9. Class內 bje ct) C o ass也是 ( cl C12年4月11日星期三
  10. 10. Class內 bje ct) C o ass也是 ( cl C #<C:0x007fbf9284de70>12年4月11日星期三
  11. 11. singleton method #<Object:0x007fd79b84f448>12年4月11日星期三
  12. 12. singleton method #<Object:0x007fd79b84f448> = obj12年4月11日星期三
  13. 13. singleton method #<Object:0x007fd79b84f448> = obj12年4月11日星期三
  14. 14. module內 M12年4月11日星期三
  15. 15. module內 M #<C:0x007fa8fb04e970> stance 的 i n C12年4月11日星期三
  16. 16. 應用在宣告class method 兩者都可以! 因為self此時代表M 用self的好處是更名時方便 不過被其他區塊蓋到的話可能會讓self變成代表別的物件 (這段程式的用途...不要問!)12年4月11日星期三
  17. 17. class也是object 內建的 Klass Class undefined method `new (Klass這個class,是Class的instance object)12年4月11日星期三
  18. 18. 呼叫method時 省略小數點(.) • 即是送訊息給self物件12年4月11日星期三
  19. 19. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先12年4月11日星期三
  20. 20. 同名時12年4月11日星期三
  21. 21. 同名時12年4月11日星期三
  22. 22. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先12年4月11日星期三
  23. 23. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先 • 不過打從⼀一開始就不應該取成同名12年4月11日星期三
  24. 24. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先 • 不過打從⼀一開始就不應該取成同名 • 除了⼀一種狀況必須清楚指明self12年4月11日星期三
  25. 25. 呼叫等號結尾的method Ruby的syntax sugar12年4月11日星期三
  26. 26. 呼叫等號結尾的method Ruby的syntax sugar X nil12年4月11日星期三
  27. 27. 呼叫等號結尾的method Ruby的syntax sugar nil12年4月11日星期三
  28. 28. 呼叫等號結尾的method Ruby的syntax sugar nil12年4月11日星期三
  29. 29. 呼叫等號結尾的method Ruby的syntax sugar nil 30 √12年4月11日星期三
  30. 30. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  31. 31. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  32. 32. Symbol跟String的不同 • 內容相同的symbol都代表同⼀一個物件 • 無法改變symbol的內容 • symbol效率比string好,很適合拿來當 hash的index12年4月11日星期三
  33. 33. 代表同⼀一個物件 1.9.2p290 :001 > "a".equal?("a")  => false 1.9.2p290 :002 > :a.equal?(:a)  => true 12年4月11日星期三
  34. 34. ”equal?”的解說 • equal? 判斷是否指到同⼀一個object • eql? 判斷是否value與type都相同 • == 判斷value是否相同(因此17==17.0)12年4月11日星期三
  35. 35. 無法改變symbol的內容 1.9.2p290 :001 > "a" + "b" => "ab" 1.9.2p290 :002 > :a + :b NoMethodError: undefined method `+ for :a:Symbol12年4月11日星期三
  36. 36. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  37. 37. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  38. 38. Ruby的自省能力 • 自省:檢查某些事物以確定它是什麼、 它知道什麼以及它能做什麼。12年4月11日星期三
  39. 39. • class # "str".class => String • is_a? # "str".is_a?(String) => true • superclass # String.superclass => Object • ancestors • methods • instance_methods • singleton_methods12年4月11日星期三
  40. 40. • protected_methods • private_methods • public_methods • public_instance_methods • protected_instance_methods • private_instance_methods12年4月11日星期三
  41. 41. • respond_to? • 應用: x = :talk if obj.respond_to?(x) obj.__send__(x) end12年4月11日星期三
  42. 42. 只顯示在該class定義的 methods:加上false [:dm, :cm, :nil?, :===, :=~, :! ~, :eql?, :hash, :<=>, :class, :singleton_class, ... (58個) [:dm]12年4月11日星期三
  43. 43. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  44. 44. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧12年4月11日星期三
  45. 45. each with index12年4月11日星期三
  46. 46. each with index √12年4月11日星期三
  47. 47. end12年4月11日星期三
  48. 48. 廣告 雲端線上徵Rails/iOS/Android工程師中 ‣ inside job board 我的技術&生活雜事部落格 ‣ http://littlebmix.blogspot.com/ 學習成功部落格 ‣ http://ascend-er.blogspot.com/12年4月11日星期三

×