Ruby attr_accessor :name 到 :name[] 数组

发布于 2024-10-10 04:29:45 字数 445 浏览 3 评论 0原文

我将如何创建数组的 attr_accessor ?

例如

class MyClass

  attr_accessor :my_attr_accessor

  def initialize()
  end

  def add_new_value(new_array)
    @my_attr_accessor += new_array
    return @my_attr_accessor
  end

end

my_class = MyClass.new
my_class.my_attr_accessor = 1
my_class.my_attr_accessor[1] = 2
my_class.my_attr_accessor.push = 3
my_class.add_new_value(5)

my_class.my_attr_accessor
=> [1, 2, 3, 5]

How would I create an attr_accessor to array?

for example

class MyClass

  attr_accessor :my_attr_accessor

  def initialize()
  end

  def add_new_value(new_array)
    @my_attr_accessor += new_array
    return @my_attr_accessor
  end

end

my_class = MyClass.new
my_class.my_attr_accessor = 1
my_class.my_attr_accessor[1] = 2
my_class.my_attr_accessor.push = 3
my_class.add_new_value(5)

my_class.my_attr_accessor
=> [1, 2, 3, 5]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海夕 2024-10-17 04:29:45

只需使用一个指向数组的实例变量,并从该实例变量创建一个访问器。

在你的类中包含如下内容:

attr_accessor :my_attr_accessor
def initialize
    @my_attr_accessor = []
end

请注意,使用attr_accessor将允许你更改变量的值。如果要确保数组保留,请使用 attr_reader 代替 attr_accessor。您仍然可以访问和设置数组元素并对数组执行操作,但无法将其替换为新值,并且使用 += 进行串联将不起作用。

Just use an instance variable that points to an array and make an accessor from that instance variable.

Inside your class include something like this:

attr_accessor :my_attr_accessor
def initialize
    @my_attr_accessor = []
end

Note that usingattr_accessor will allow you to change the value of the variable. If you want to ensure that the array stays, use attr_reader in place of attr_accessor. You will still be able to access and set array elements and perform operations on the array but you won't be able to replace it with a new value and using += for concatenation will not work.

初懵 2024-10-17 04:29:45

如果您同意数组始终存在,@david4dev 的答案很好。如果您只希望数组在第一次使用时弹出,而不希望用户能够用新数组替换它(通过赋值):

class MyClass
  def my_attr_accessor
    @my_attr_accessor ||= []
  end
  def add_new_value( value )
    my_attr_accessor << value
  end
  def add_new_values( values_array )
    my_attr_accessor.concat values_array
  end
end

用户仍然可以调用my_class.my_attr_accessor。 Replace( [] ) 将其删除。

If you are OK with the Array always existing, @david4dev's answer is good. If you only want the array to pop into existence on the first usage, and never want the user to be able to replace it with a new array (via assignment):

class MyClass
  def my_attr_accessor
    @my_attr_accessor ||= []
  end
  def add_new_value( value )
    my_attr_accessor << value
  end
  def add_new_values( values_array )
    my_attr_accessor.concat values_array
  end
end

The user could still call my_class.my_attr_accessor.replace( [] ) to wipe it out.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文