Sha*_*ser 5 ruby design-patterns
我写了很多initialize代码来设置attrs参数,类似于:
class SiteClient
attr_reader :login, :password, :domain
def initialize(login, password, domain='somedefaultsite.com')
@login = login
@password = password
@domain = domain
end
end
Run Code Online (Sandbox Code Playgroud)
有没有更多的Ruby方式这样做?我觉得我一遍又一遍地编写相同的样板设置代码.
你可以使用Ruby Struct:
class MyClass < Struct.new(:login, :password, :domain)
end
Run Code Online (Sandbox Code Playgroud)
或者你可以尝试一些宝石,即Virtus:
class MyClass
include Virtus.model
attribute :login, String
attribute :password, String
attribute :domain, String
end
Run Code Online (Sandbox Code Playgroud)
然后(在两种情况下):
MyClass.new(login: 'a', password: 'b', domain: 'c')
Run Code Online (Sandbox Code Playgroud)