有没有Ruby方法来删除初始化器中的样板代码?

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方式这样做?我觉得我一遍又一遍地编写相同的样板设置代码.

Hau*_*eth 8

你可以使用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)

  • 结构是一个很好的选择.它简洁,传达了你的意图,而且它是内置的. (3认同)
  • 使用`Struct`将使所有字段成为读写(而不是像OP所示的代码中的只读). (2认同)