【发布时间】:2011-01-05 07:13:48
【问题描述】:
这两种说法有什么区别?我在我的 Rails 应用程序中使用它们,在我看来它们做同样的事情
array_a = Array.new
array_b = []
【问题讨论】:
-
要清除/重置数组而不创建新对象,使用
array.clear实现#=> [ ]
标签: ruby-on-rails ruby
这两种说法有什么区别?我在我的 Rails 应用程序中使用它们,在我看来它们做同样的事情
array_a = Array.new
array_b = []
【问题讨论】:
array.clear实现#=> [ ]
标签: ruby-on-rails ruby
这两个语句在功能上是相同的。 Array.new 但是可以接受参数和块:
Array.new # => []
Array.new(2) # => [nil,nil]
Array.new(5,"A") # =>["A","A","A","A","A"]
a = Array.new(2,Hash.new)
a[0]['cat'] = 'feline'
a # => [{"cat"=>"feline"},{"cat"=>"feline"}]
a[1]['cat'] = 'Felix'
a # => [{"cat"=>"Felix"},{"cat"=>"Felix"}]
a = Array.new(2){Hash.new} # Multiple instances
a[0]['cat'] = 'feline'
a # =>[{"cat"=>"feline"},{}]
squares = Array.new(5){|i|i*i}
squares # => [0,1,4,9,16]
copy = Array.new(squares) # initialized by copying
squares[5] = 25
squares # => [0,1,4,9,16,25]
copy # => [0,1,4,9,16]
注:以上示例取自Programming Ruby 1.9
【讨论】:
Array.new(count, object) 产生相同对象的数组是一个陷阱,这意味着我避免使用这种方法。
[] 是 Array 类的单例方法 [] 的快捷方式,该方法又以与 Array.new 相同的方式创建一个新数组,因此您可能会说“它们是相同的”而不必太担心.
请注意,irb 中对[] 的每次调用都会创建一个新数组:
>> [].object_id
=> 2148067340
>> [].object_id
=> 2149414040
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
【讨论】:
如Hash.new 与{}。他们是一样的。包括速度。
【讨论】:
基本没有区别
【讨论】:
其他人已经回答了你
这两个语句在功能上是相同的
但是有一些指导方针可以指导您何时应该使用每一个(因此您的代码更易于阅读)。背后的原因是:
必须编写程序供人们阅读,并且只能偶尔供机器执行。
来自: https://github.com/rubocop-hq/ruby-style-guide#literal-array-hash
首选文字数组和哈希创建表示法(除非您需要将参数传递给它们的构造函数)。
因此,如果您要创建一个空数组,[] 是最好的选择,但如果您需要使用一组 N 个 nil 对象创建数组,那么您应该编写 Array.new(N)。
【讨论】: