1

我查找了 Array 类的 to_ary 方法。我很困惑该方法与其源文档的关系。

to_ary 方法 => 返回自身

如果我这样做:

1.9.3-p0 :013 > a = [1,33,42]
=> [1, 33, 42] 
1.9.3-p0 :014 > a.to_ary
=> [1, 33, 42] 
1.9.3-p0 :015 > a
=>[1, 33, 42] 

为什么属性静态 VALUE 是必要的?VALUE 是猎犬吗?参数之间的空格(而不是逗号)是否意味着第二个参数是接收者调用的方法?

static VALUE

rb_ary_to_ary_m(VALUE ary) 
{
   return ary;
}

最好的,

cj3kim

4

2 回答 2

2

这是 C 代码。Ruby 解释器是用 C 语言编写的。在此代码中,第一个参数用作self. 红宝石中的等价物是:

def to_ary
  return self
end
于 2012-05-05T23:08:54.967 回答
1

这里发生的事情是,它将它视为一个数组,而 IRB 正在使用 print 方法将其推送到屏幕上。Print 会将其转换to_ary为字符串,因此您不会看到任何差异,当您使用 puts 时会看到差异。将 usesto_ary置于后台,而 print 使用to_s.

to_ary方法用于隐式转换,而to_a用于显式转换。一个很好的例子是方法flatten,它接受一个多维数组并将其展平为一个奇异维数组。除非您使用危险的方法,否则当您继续使用 flatten 方法的串联时,实际变量将保持不变。这是因为flatten使用to_ary而不是to_a,而flatten!使用to_ato_ary将其视为该实例的数组,但不会永久更改变量。

于 2015-11-21T16:28:39.703 回答