欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ruby简化属性声明与初始化

程序员文章站 2022-07-09 20:35:02
...
如果要一边声明一边初始化可以用这样的代码:
class Object 
  def better_accessor(attrs) 
    (class << self; self; end).send :attr_accessor, *attrs.keys
    attrs.each {|k,v| instance_variable_set("@#{k}", v)}
  end 
end

然后就可以这样用:
class Test
  def intialize
    better_accessor :foo =>'bar' #初始化值即定死(值的正确性就自己保证了,用户只能通过setter改)
  end
end

t = Test.new
t.foo #=> 'bar'

或者先建对象后加属性,不用先定死值,但是用户可以在声明时绕过可能的setter验证,不安全:
t2 = Object.new
t2.better_accessor :hello =>'world'
t2.hello #=> 'world'
相关标签: Ruby UP