浏览 279 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (16)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-03-02
J2EE app 一般都有用到 xDoclet 做一些宣告然後再產生程式碼. Java 1.5 開始支援 Annotation 功能來解決這方面需要. 其實 Ruby 拜本身就是 dynamic 語言之賜, 它這方面的方法可就高明多了, 這也就是為何 Rails 看起來又像是 metaprogramming 的原因.
請參考這篇說明, Metaprogramming Ruby
Ruby 不用 setXXX, getXXX, 而是用稱為 attribute accessor 這種方法.
class Book
def initialize(title)
@title = title
end
def title
@title
end
def title=(value)
@title = value
end
end
b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd"
puts b.title
更進一步, 可以用 Ruby 來開發你自己的 programming language 一樣, 可以將上面存取 @title 的兩個方法給作掉, Ruby 內建 attr_reader, attr_write, attr_accessor 這幾個 methods 就是為了這個目地. 如此一來, 你就可以把程式改寫為:
class Book
attr_accessor :title
def initialize(title)
@title = title
end
end
b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd"
puts b.title
是不是簡單又直覺? 就是提供一些新的 methods, 就可以輕鬆咦髂愕?class. 這就是 Rails 為何都不需用其它檔案來輔助做設定, 利用這些技巧在加上 coding convention, 就很漂亮, 所以不知道 Rails 用法時就是找那些 method 說明就對了.
Showing changes from revision #3 to #4: Added | Removed
J2EE app 一般都有用到 xDoclet 做一些宣告然後再產生程式碼. Java 1.5 開始支援 Annotation 功能來解決這方面需要. 其實 Ruby 拜本身就是 dynamic 語言之賜, 它這方面的方法可就高明多了, 這也就是為何 Rails 看起來又像是 metaprogramming 的原因.
請參考這篇說明, Metaprogramming Ruby
Ruby 不用 setXXX, getXXX, 而是用稱為 attribute accessor 這種方法.
class Book
def initialize(title)
@title = title
end
def title
@title
end
def title=(value)
@title = value
end
end
b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd"
puts b.title
更進一步, 可以用 Ruby 來開發你自己的 programming language 一樣, 可以將上面存取 @title 的兩個方法給作掉, Ruby 內建 attr_reader, attr_write, attr_accessor 這幾個 methods 就是為了這個目地. 如此一來, 你就可以把程式改寫為:
class Book
attr_accessor :title
def initialize(title)
@title = title
end
end
b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd"
puts b.title
是不是簡單又直覺? 就是提供一些新的 methods, 就可以輕鬆咦髂愕?class. 這就是 Rails 為何都不需用其它檔案來輔助做設定, 利用這些技巧在加上 coding convention, 就很漂亮, 所以不知道 Rails 用法時就是找那些 method 說明就對了.
摘自:EasyTime 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


