相关疑难解决方法(0)

如何用Ruby干净地初始化Ruby中的属性?

class Foo
  attr_accessor :name, :age, :email, :gender, :height

  def initalize params
    @name = params[:name]
    @age = params[:age]
    @email = params[:email]
    .
    .
    .
  end
Run Code Online (Sandbox Code Playgroud)

这似乎是一种愚蠢的做法.在Ruby中初始化对象的更好/更惯用的方法是什么?

Ruby 1.9.3

ruby object new-operator ruby-1.9.3

29
推荐指数
4
解决办法
2万
查看次数

在hash参数上迭代调用self.send以初始化()

我正在尝试理解以下Ruby代码.

它看起来像是attrs一个散列,它作为参数传递,默认值为空散列.

然后attrs.each迭代hash(|k,v|)中的键值对.

通过self.send在此迭代期间调用键值对的元素可以获得什么效果?

def initialize(attrs = {}, *args)
  super(*args)
  attrs.each do |k,v|
    self.send "#{k}=", v
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby

18
推荐指数
1
解决办法
9568
查看次数

将构造函数参数转换为实例变量

可能重复:
在ruby中创建惯用对象

当我有一个如下所示的initialize方法时,有很多次:

class Foo  
    def initialize bar, buz, ...
        @bar, @buz, ... = bar, buz, ...
    end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法用一个简单的命令来做到这一点,如:

class Foo
    attr_constructor :bar, :buz, ...
end
Run Code Online (Sandbox Code Playgroud)

其中,符号表示实例变量的名称(与精神/风味attr_accessor,attr_reader,attr_writer)?


我想知道是否有内置方式或更优雅的方式做这样的事情:

class Class
    def attr_constructor *vars
        define_method("initialize") do |*vals|
            vars.zip(vals){|var, val| instance_variable_set("@#{var}", val)}
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

所以我可以像这样使用它:

class Foo
    attr_constructor :foo, :bar, :buz
end

p Foo.new('a', 'b', 'c')      # => #<Foo:0x93f3e4c @foo="a", @bar="b", @buz="c">
p Foo.new('a', 'b', 'c', 'd') # => #<Foo:0x93f3e4d @foo="a", @bar="b", …
Run Code Online (Sandbox Code Playgroud)

ruby

7
推荐指数
1
解决办法
2405
查看次数

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

现在是时候缩短它了:

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.

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

ruby initializer

6
推荐指数
2
解决办法
6064
查看次数

用循环创建多个变量?

我想知道是否有一种优雅的方法来使用ruby中的循环创建变量?

说我想把它放在某种循环中

def workhours
  @monday = blah
  @tuesday = brah
  @wednesday = bro
  @thursday = blap
  @friday = blagh
end
Run Code Online (Sandbox Code Playgroud)

我希望能做什么

def workhour_ideally
  days = [ "monday", "tuesday", "wednesday", "thursday", "friday" ]

  days.each do |smack|
    @"smack" = whatever
  end
end
Run Code Online (Sandbox Code Playgroud)

红宝石可以吗?

ruby

2
推荐指数
1
解决办法
1418
查看次数

标签 统计

ruby ×5

initializer ×1

new-operator ×1

object ×1

ruby-1.9.3 ×1