Ruby 将值赋给类的多个成员
现在我有了一个数组,比如Ruby 将值赋给类的多个成员,ruby,arrays,Ruby,Arrays,现在我有了一个数组,比如 class A attr_accessor :dab .... end 现在我想为数组arr中存在的类a的所有实例设置一个值。在ruby/rails中有没有快捷方式可以做到这一点 此外,我还有一个继承自ActiveRecord::Base的 我的实际需要是: arr = [A.new, A.new, A.new] 因此,所有找到的对象都将dab设置为2 有快捷方式吗?要从数组中获取A类项目,可以使用“全选/全选” arr.select{el | el.cla
class A
attr_accessor :dab
....
end
现在我想为数组arr中存在的类a的所有实例设置一个值。在ruby/rails中有没有快捷方式可以做到这一点
此外,我还有一个继承自ActiveRecord::Base的
我的实际需要是:
arr = [A.new, A.new, A.new]
因此,所有找到的对象都将dab设置为2
有快捷方式吗?要从数组中获取A类项目,可以使用“全选/全选” arr.select{el | el.class==A}或arr.select{el | el | A==el} 虽然您希望为多个对象(而不是它们对应的类)指定一个值,但仍要实现实际结果。类A不定义实际对象,它只定义对象在创建时使用的蓝图。因此,找到一种方法来分配a的所有实例的值并不是你想要的,尽管我可能已经错过了你所要求的要点 要将值指定给对象数组,请执行以下操作:
A.find_all_by_some_condition.all.dabs = 2
也许你想在那之后保存它们,现在,arr.each&:save可能会派上用场。如果你还不知道的话,就去查号。非常有用。要从数组中获取A类项目,可以使用select/find\u all arr.select{el | el.class==A}或arr.select{el | el | A==el} 虽然您希望为多个对象(而不是它们对应的类)指定一个值,但仍要实现实际结果。类A不定义实际对象,它只定义对象在创建时使用的蓝图。因此,找到一种方法来分配a的所有实例的值并不是你想要的,尽管我可能已经错过了你所要求的要点 要将值指定给对象数组,请执行以下操作:
A.find_all_by_some_condition.all.dabs = 2
也许你想在那之后保存它们,现在,arr.each&:save可能会派上用场。如果你还不知道的话,就去查号。非常有用。默认情况下,您不能直接这样做,但是您可以使用Ruby的方法构建类似的东西 两种解决方案: 解决方案1-使用包装器类 对于多赋值数组,我们将该类称为MArray
A.find_all_by_some_condition.each { |a| a.dab = 2 }
我们还需要添加对阵列中MArray的支持,以便进行包装。对于质量分配,我们将调用方法mas:
class MArray
def initialize(inner_array)
@inner = inner_array
end
def method_missing(meth, value)
# Check if assignement, and if it is then run mass-assign
if meth.to_s =~ /^\w+=$/
@inner.each { |itm| itm.send(meth, value) }
else
raise ArgumentError, "MArray: not an assignment"
end
end
end
Blob = Struct.new(:dab)
arr = [Blob.new] * 3
arr.mas.dab = 123
arr
=> [#<struct Blob dab=123>, #<struct Blob dab=123>, #<struct Blob dab=123>]
用法很简单:
class Array
def mas
# Wrap MArray around self
MArray.new(self)
end
end
使用时间甚至比MArray更短:
默认情况下,您不能直接这样做,但是您可以使用Ruby的方法构建类似的东西 两种解决方案: 解决方案1-使用包装器类 对于多赋值数组,我们将该类称为MArray
A.find_all_by_some_condition.each { |a| a.dab = 2 }
我们还需要添加对阵列中MArray的支持,以便进行包装。对于质量分配,我们将调用方法mas:
class MArray
def initialize(inner_array)
@inner = inner_array
end
def method_missing(meth, value)
# Check if assignement, and if it is then run mass-assign
if meth.to_s =~ /^\w+=$/
@inner.each { |itm| itm.send(meth, value) }
else
raise ArgumentError, "MArray: not an assignment"
end
end
end
Blob = Struct.new(:dab)
arr = [Blob.new] * 3
arr.mas.dab = 123
arr
=> [#<struct Blob dab=123>, #<struct Blob dab=123>, #<struct Blob dab=123>]
用法很简单:
class Array
def mas
# Wrap MArray around self
MArray.new(self)
end
end
使用时间甚至比MArray更短:
我的第一次尝试是向array类添加一个方法dab=value,并在最后将此代码添加到类的文件中。为了聪明/愚蠢,请检查dab=是否只处理类的实例:我的第一次尝试是向array类添加一个方法dab=值,并在最后将此代码添加到类的文件中。要聪明/愚蠢,请检查dab=是否只处理类的实例:您可以将每个实例与一个符号和/symbol/proc一起使用,就像使用map一样。Map实际上是用于转换数据结构,而不是用于迭代。您可以将每个数据结构与一个符号/symbol/proc一起使用,就像使用Map一样。Map实际上是用于转换数据结构,而不是用于迭代。