如何在Ruby中生成初始化程序?

Chr*_*Xue 6 ruby initializer

现在是时候缩短它了:

class Foo
  attr_accessor :a, :b, :c, :d, :e

  def initialize(a, b, c, d, e)
    @a = a
    @b = b
    @c = c
    @d = d
    @e = e
  end
end
Run Code Online (Sandbox Code Playgroud)

我们有'attr_accessor'来生成getter和setter.

我们有什么要按属性生成初始值设定项吗?

Phr*_*ogz 13

最简单的:

Foo = Struct.new( :a, :b, :c )
Run Code Online (Sandbox Code Playgroud)

生成访问器和初始化器.您可以使用以下方式进一步自定义

Foo = Struct.new( … ) do
  def some_method
    …
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 你也可以做`class Foo <Struct.new(:a,:b,:c)`. (4认同)

sal*_*ost 1

您可以使用类似 gem 的构造函数。从描述来看:

声明式意味着通过将哈希值传递给构造函数来定义对象属性,构造函数将设置相应的 ivars。

它很容易使用:

Class Foo
  constructor :a, :b, :c, :d, :e, :accessors => true
end

foo = Foo.new(:a => 'hello world', :b => 'b',:c => 'c', :d => 'd', :e => 'e')
puts foo.a # 'hello world'
Run Code Online (Sandbox Code Playgroud)

如果您不希望使用访问器生成 ivars,则可以省略 :accessors => true

希望这有帮助/Salernost