Ruby数组创建,Array.new vs []

时间:2011-01-05 07:13:48

标签: ruby-on-rails ruby

这两个陈述之间有什么区别?我在我的rails应用程序中使用它们,对我看起来它们做同样的事情

array_a = Array.new
array_b = []

5 个答案:

答案 0 :(得分:64)

这两个陈述在功能上是相同的。 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

答案 1 :(得分:9)

[]是Array类的单例方法[]的快捷方式,它以与Array.new相同的方式创建一个新数组,所以你可能会说'他们是同样的'不用担心太多。

请注意,每次调用irb中的[]都会创建一个新数组:

>> [].object_id
=> 2148067340
>> [].object_id
=> 2149414040

来自Ruby's C code

rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);

答案 2 :(得分:0)

根本没有区别

答案 3 :(得分:0)

例如Hash.new{}。他们是一样的。包括速度。

答案 4 :(得分:0)

没有什么区别,但是...

因为其他人已经回答了您

  

这两个语句在功能上是相同的

但是有一些指南可以指导何时使用每个指南(因此,您的代码更易于阅读)。其背后的原因是:

  

必须编写程序供人们阅读,并且只能偶然地使机器执行。

来自: https://github.com/rubocop-hq/ruby-style-guide#literal-array-hash

  

建议使用文字数组和哈希创建符号(除非您需要将参数传递给它们的构造函数)。

因此,如果要创建一个空数组[]是最佳选择,但是如果需要使用一组N个nil对象创建数组,则应该写Array.new(N)。 / p>