是什么意思,以及语法的Ruby文档在哪里:
Array(phrases)
我发现在这里浏览Rails源代码:
# File actionpack/lib/action_view/helpers/text_helper.rb, line 109
...
119: match = Array(phrases).map { |p| Regexp.escape(p) }.join('|')
我认为通常会使用Array.new创建一个数组,所以必须在这里进行一些不同的事情。从这段代码的上下文来看,phrases
变量可以是字符串或字符串数组。
答案 0 :(得分:13)
最有可能是Kernel#Array
方法,请参阅here。它与Array.new
略有不同;它更像是一个阵列。 (它会尝试to_ary
和to_a
。)
答案 1 :(得分:2)
Array(x)似乎与x.to_a完全相同。
@Brian是对的 - 这是一种内核方法。 Pickaxe说:
数组(arg) - > anArray
返回arg .to_a。
Array(1..5) » [1, 2, 3, 4, 5]
答案 2 :(得分:2)
这是Kernel#Array
方法,正如其他人已经说过的那样。
但Ruby文档并没有说明这种方法在简化代码方面的用处。此外,它没有告诉您没有to_ary
或to_a
方法的对象被封装在一个数组中。
Array([1,2,3]) -> [1,2,3]
Array(1..3) -> [1,2,3]
Array({ a: 1, b: 2 }) -> [[:a, 1],[:b,2]]
Array("Hello World") -> ["Hello World"]
Array(1) -> [1]
Kernel#Array
的所有这些功能允许您处理带有参数的典型角落案例。
请参阅此代码,这是许多API或DSL中的典型情况:
# data can be nil, a single value or an array
def handle(data)
data ||= Array.new #Case 1: Data is nil
data = [data] unless data.is_a?(Array) #Case 2: Data is a single value
data.each { |d| ... }
end
使用Kernel#Array
:
def handle(data)
Array(data).each { |d| ... }
end
当然,必须小心为data
参数提供不同类型,因为to_ary
/ to_a
方法可能会或可能不会提供您期望的内容。