2010-12-16 63 views

回答

1

那麼,在Ruby中沒有這樣的「屬性」。基本上,自從你創造了這個詞以後(或者更準確地說:你已經定義了它的定義,因爲它適用於Ruby),你可以定義它的含義,但是在另一方面它也意味着你必須自己實現它的語義。所以,如果你將「屬性」定義爲「以等號結尾但不完全由等號組成的方法」,那麼,是的,你的定義是最好的方法。 (順便說一句:你的「財產」的定義包括方法,如<=>=!=,這可能會或可能不是你想要的是。)

+0

我想我的意思是屬性。已公開的類內部變量(公共)。正在查看YAML stdlib代碼,無法找到它在這些代碼上的循環。我確定它在那裏,但我找不到它。 – BuddyJoe 2010-12-17 00:28:43

+0

小修正:!=不是一種方法。 – 2010-12-17 00:36:05

+0

@Ryan:1.9甚至沒有? – 2010-12-17 01:20:32

2

在Ruby中,除非你做的元編程來破壞封裝,只有這樣,才能改變另一個對象的實例變量是調用碰巧這樣做的方法。沒有使用元編程,就無法告訴方法正在改變哪個實例變量。

舉例來說,如果我有一個人,那類有方法height_feet=height_meters=在裏面,我也不能告訴我們,如果那人的高度是基於@height_feet@height_meters甚至@height_cubits實施。

這是一件好事,因爲它意味着你純粹編程接口,而不是實現。

+0

所以,如果你想序列化對象或寫一個數據映射器......最常見的做法是什麼?最簡單的方法? – BuddyJoe 2010-12-18 07:33:43

+0

@tyndall:我認爲這是一個單獨的問題。 – 2010-12-18 23:14:58

3

您的正則表達式不完整:它匹配以任何字符開頭的方法,而不僅僅是單詞字符。讓所有的「作家」的最好辦法是

methods.grep /^\w+=$/ 

而且正則表達式可以縮短到

methods.grep /\w=$/ 

,但目前還不太清楚。

+0

正則表達式在開始處沒有'^',所以它匹配任何長度的方法名稱。 – 2011-03-15 22:14:22

+0

正則表達式中的^表示字符串或行的開始,這與字符串的長度完全無關,並且在只有一行的方法名稱中尤爲不重要。 – Tom 2011-03-15 22:40:02

+0

@Refactor:我的意思是指tyndall的正則表達式,而不是正則表達式。我的意思是說它已經與所有的「作家」相匹配。 – 2011-03-15 22:47:25

相關問題