001 Ruby小觀念與小技巧

48
30分鐘技術分享 Ruby小觀念&技巧 By Bruce Li 2012/04/09 雲端線上科技股份有限公司 12年4月11日星期三

description

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

Transcript of 001 Ruby小觀念與小技巧

Page 1: 001 Ruby小觀念與小技巧

30分鐘技術分享Ruby小觀念&技巧 By Bruce Li

2012/04/09雲端線上科技股份有限公司

12年4月11日星期三

Page 2: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 3: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 4: 001 Ruby小觀念與小技巧

self是誰

• 代表當前的object

• 在最上層時,則為預設(main)

12年4月11日星期三

Page 5: 001 Ruby小觀念與小技巧

規則程式區塊 範例 self代表

最上層區塊(method外) main

最上層區塊def m main

class內class C C

class內 def self.m Cclass內 def m C的instance

singleton def obj.m obj

module內module M M

module內 def m 混入M的物件

12年4月11日星期三

Page 6: 001 Ruby小觀念與小技巧

最上層區塊

main

main

12年4月11日星期三

Page 7: 001 Ruby小觀念與小技巧

Class內

12年4月11日星期三

Page 8: 001 Ruby小觀念與小技巧

Class內C

(class也是object)

12年4月11日星期三

Page 9: 001 Ruby小觀念與小技巧

Class內C

C(class

也是object)

12年4月11日星期三

Page 10: 001 Ruby小觀念與小技巧

Class內

#<C:0x007fbf9284de70>

C

C(class

也是object)

12年4月11日星期三

Page 11: 001 Ruby小觀念與小技巧

#<Object:0x007fd79b84f448>

singleton method

12年4月11日星期三

Page 12: 001 Ruby小觀念與小技巧

#<Object:0x007fd79b84f448>

singleton method

obj

=12年4月11日星期三

Page 13: 001 Ruby小觀念與小技巧

#<Object:0x007fd79b84f448>

singleton method

obj

=12年4月11日星期三

Page 14: 001 Ruby小觀念與小技巧

module內M

12年4月11日星期三

Page 15: 001 Ruby小觀念與小技巧

#<C:0x007fa8fb04e970>

module內M

C的instance

12年4月11日星期三

Page 16: 001 Ruby小觀念與小技巧

應用在宣告class method

(這段程式的用途...不要問!)

兩者都可以!因為self此時代表M用self的好處是更名時方便

不過被其他區塊蓋到的話可能會讓self變成代表別的物件

12年4月11日星期三

Page 17: 001 Ruby小觀念與小技巧

class也是object

KlassClass

undefined method `new'

內建的

(Klass這個class,是Class的instance object)12年4月11日星期三

Page 18: 001 Ruby小觀念與小技巧

呼叫method時省略小數點(.)

• 即是送訊息給self物件

12年4月11日星期三

Page 19: 001 Ruby小觀念與小技巧

呼叫method時省略小數點(.)

• 即是送訊息給self物件

• 與變數名稱相同時,變數優先

12年4月11日星期三

Page 20: 001 Ruby小觀念與小技巧

同名時

12年4月11日星期三

Page 21: 001 Ruby小觀念與小技巧

同名時

12年4月11日星期三

Page 22: 001 Ruby小觀念與小技巧

呼叫method時省略小數點(.)

• 即是送訊息給self物件

• 與變數名稱相同時,變數優先

12年4月11日星期三

Page 23: 001 Ruby小觀念與小技巧

呼叫method時省略小數點(.)

• 即是送訊息給self物件

• 與變數名稱相同時,變數優先• 不過打從⼀一開始就不應該取成同名

12年4月11日星期三

Page 24: 001 Ruby小觀念與小技巧

呼叫method時省略小數點(.)

• 即是送訊息給self物件

• 與變數名稱相同時,變數優先• 不過打從⼀一開始就不應該取成同名• 除了⼀一種狀況必須清楚指明self

12年4月11日星期三

Page 25: 001 Ruby小觀念與小技巧

呼叫等號結尾的methodRuby的syntax sugar

12年4月11日星期三

Page 26: 001 Ruby小觀念與小技巧

呼叫等號結尾的method

nil

Ruby的syntax sugar

⤴X

12年4月11日星期三

Page 27: 001 Ruby小觀念與小技巧

呼叫等號結尾的method

nil

Ruby的syntax sugar

12年4月11日星期三

Page 28: 001 Ruby小觀念與小技巧

呼叫等號結尾的method

nil

Ruby的syntax sugar

12年4月11日星期三

Page 29: 001 Ruby小觀念與小技巧

呼叫等號結尾的method

nil

Ruby的syntax sugar

30√12年4月11日星期三

Page 30: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 31: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 32: 001 Ruby小觀念與小技巧

Symbol跟String的不同

• 內容相同的symbol都代表同⼀一個物件

• 無法改變symbol的內容

• symbol效率比string好,很適合拿來當hash的index

12年4月11日星期三

Page 33: 001 Ruby小觀念與小技巧

代表同⼀一個物件1.9.2p290 :001 > "a".equal?("a") => false

1.9.2p290 :002 > :a.equal?(:a) => true 

12年4月11日星期三

Page 34: 001 Ruby小觀念與小技巧

”equal?”的解說

• equal? 判斷是否指到同⼀一個object

• eql? 判斷是否value與type都相同

• == 判斷value是否相同(因此17==17.0)

12年4月11日星期三

Page 35: 001 Ruby小觀念與小技巧

1.9.2p290 :001 > "a" + "b" => "ab"

1.9.2p290 :002 > :a + :bNoMethodError: undefined method `+' for :a:Symbol

無法改變symbol的內容

12年4月11日星期三

Page 36: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 37: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 38: 001 Ruby小觀念與小技巧

Ruby的自省能力

• 自省:檢查某些事物以確定它是什麼、它知道什麼以及它能做什麼。

12年4月11日星期三

Page 39: 001 Ruby小觀念與小技巧

• class # "str".class => String

• is_a? # "str".is_a?(String) => true

• superclass # String.superclass => Object

• ancestors

• methods

• instance_methods

• singleton_methods

12年4月11日星期三

Page 40: 001 Ruby小觀念與小技巧

• protected_methods

• private_methods

• public_methods

• public_instance_methods

• protected_instance_methods

• private_instance_methods

12年4月11日星期三

Page 41: 001 Ruby小觀念與小技巧

• respond_to?

• 應用:x = :talkif obj.respond_to?(x) obj.__send__(x)end

12年4月11日星期三

Page 42: 001 Ruby小觀念與小技巧

只顯示在該class定義的methods:加上false

[:dm]

[:dm, :cm, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, ... (58個)

12年4月11日星期三

Page 43: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 44: 001 Ruby小觀念與小技巧

目錄

• self是誰

• Symbol跟String的不同

• Ruby的自省能力

• ⼀一個小技巧

12年4月11日星期三

Page 45: 001 Ruby小觀念與小技巧

each with index

12年4月11日星期三

Page 46: 001 Ruby小觀念與小技巧

each with index

12年4月11日星期三

Page 47: 001 Ruby小觀念與小技巧

end

12年4月11日星期三