在 php 裡面,很多時候我們會用到 hash 來傳遞變數,像是 $something['abc']['def'] 之類的方式,或許這是乙個在效率上面很好的實做方式,但是總是...怪怪的,不是那麼的優雅。在 rails 裡面,難免會有 controller 傳遞變數到 view 裡面的時候,這個時候通常是用 flash 這個內定的 hash 來傳遞,但是也會遇到相同的問題,就是 hash 實在是不夠物件導向。
flash[:somthing][:abc][:def]
這樣的寫法到底是好還是不好呢?很多時候我很想說服自己這樣就好了,code work 即可,但是心中把這種事情物件導向化的想法一直沒變。所以我就開始 survey ,該怎麼作會比較 oo 呢?
我將訊息傳遞的 object 宣告成乙個 model 上面好不好?code 很好看,可是心理總覺得小題大作了點,明明乙個 hash 就可以解決的事情,需要特別使用乙個 model 物件來寫嗎?有沒有辦法可以超快速的把訊息傳遞包成乙個簡單的物件,而且裡面不需要 method ,只需要幾個 message 的 attribute 即可?
我看到了
struct ,他的作法很簡單
class_def = struct.new( :name, :address, :zip )
就是宣告乙個 class 的定義叫做 class_def,裡面一共有 name ,address,zip 幾個變數。
當我們需要 new 乙個 object ,我們把他叫做 obj
obj = class_def.new
如此即可。以後就可以這樣使用
obj.name
obj.address
obj.zip
一開始,所有的變數都是 nil,這是因為沒有 constructor去宣告初始值。在 struct 裡面有辦法達成嗎?當然有,在 new 這個 object 時這樣作
obj = class_def.new( 'a' , 1 , '123')
即可。我常常這樣使用struct 來做 message passing 的 object,一行即可做到 new 乙個我自己定義的 message object
msg = struct.new( :error , :alert , :warning).new
如此的寫法對我來說,比 flash[:error] 來的更為優雅。
這個東西與其說是技巧,不如說是乙個物件導向的偏執分子的固執行為,沒什麼了不起。你依舊可以用 hash 達成每一件 struct 做的到的事情。
struct結構體的多種宣告方式
在宣告結構體時,必須列出它包含的所有成員 語法結構struct tag variable list struct x 這個宣告建立名為x的變數,它包含四個成員。struct y 20 z 這個宣告建立名為y和z的指標變數,y是乙個陣列,它包含20個結構。z是乙個指標,指向這型別的結構。這兩個宣告是截...
物件的宣告方式
物件的宣告方式有多種,那麼我們看一下有哪幾種吧!1 字面量的方式宣告物件 var obj 2 new 操作符 object 宣告物件 var obj newobject obj.屬性名稱 屬性值 obj.方法名稱 function 3 建構函式宣告物件 function text 引數列表 var ...
struct型別宣告的疑問
如果struct型別的宣告放在函式體內,比如下面這個程式 include define n 5 int main struct student stu n s stu s input stu return 0 struct student input struct student p 編譯時在引用i...