ruby 的物件怎引用其它的 class 的 method ?.


#1

問一個比較笨的問題~~

一般在使用 gem 時有時拉下來會有一個物件…
e.g.
a = Curl.get(xxxx)

但如果想要用其它的 gem 的 class method 時~要怎使用?
e.g.
a = Curl.get(xxxx)
a.body_str → String
想把這個 a 的東西丟給 nokogiri (html parser) 的 method 去處理…
像這種情況怎處理?

還是我的觀念有錯誤??

當然直接如果用同一個 gem (同個class)就沒這問題~
只是好奇這種跨 class 的 instance 物件是怎運作的??
主要是想把資料用多個 class 的 method 來依序處理…

以上
還是觀念上有錯誤?..
還是採用 duck-type 的寫法
先把 class 建好~
再用 instance (自然就有 duck-type 的綜合 method)?

謝謝


#2

hmm…這就像是每間公司都有的表單,你要照表單填,填錯不給進的意思一樣,基本上中間都會通過共用的東西,類似一些基本型別 int / string / boolean / float … 否則對方的接口端就要想辦法來轉之類的,很麻煩

anyway 餵給他需要的東西即可,不要想太多,而有些東西本來就是你該做的,類似你所說的型別轉換,不要偷懶

至於用 duck type 搞的話…你要把 Curl 的物件繼承 String 或 mixin 才行,或是自己寫個物件繼承 String,然後餵進去你的 a 出來一樣把 a.body_str 餵出去,或是實做類似 to_s / inspect 的method …anyway 你不會希望這樣做的,尤其 call 基礎的 lib 時

OOP 類的 duck type 的意思是相對於類似 C# 或 Java 的那種強型別語言且限定繼承樹的架構下,Ruby 可以利用繼承或 mixin 甚至是 overwrite 的方式來完成 "對方的需求",也就是 method 的實作,這提供比較大的彈性,但 … 通常那是自己開的架構的活性,而非這種基礎 lib 的用法的介接時使用就是了

duck type 缺點在於,你要非常瞭解對方需要什麼,甚至怎麼用你給他的物件時才可以這樣搞,所以你還要去看 nokogiri 的 source code 才行,以上