为什么在 Rails 中使用 %w[]?

use*_*180 4 ruby ruby-on-rails

考虑到 Rails 中的数组与类型无关,为什么要使用 %w[]?

jan*_*kan 8

这是定义字符串数组的最有效方法,因为您不必使用引号和逗号。

%w(abc def xyz)
Run Code Online (Sandbox Code Playgroud)

代替

['abc', 'def', 'xyz']
Run Code Online (Sandbox Code Playgroud)


Pra*_*han 6

重复的问题

http://stackoverflow.com/questions/1274675/what-does-warray-mean
http://stackoverflow.com/questions/5475830/what-is-the-w-thing-in-ruby
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,您可以关注https://simpleor.wordpress.com/2009/03/15/qqwwxrs/

这些是 ruby​​ 中百分比字符串的类型:

%w : Array of Strings
%i : Array of Symbols
%q : String
%r : Regular Expression
%s : Symbol
%x : Backtick (capture subshell result)
Run Code Online (Sandbox Code Playgroud)

举一些例子,你有一些字符集执行一个段落,如

Thanks for contributing an answer to Stack Overflow!
Run Code Online (Sandbox Code Playgroud)

所以当你尝试

%w(Thanks for contributing an answer to Stack Overflow!)
Run Code Online (Sandbox Code Playgroud)

然后你会得到像这样的输出

=> ["Thanks", "for", "contributing", "an", "answer", "to", "Stack", "Overflow!"] 
Run Code Online (Sandbox Code Playgroud)

如果您将使用一些集合或单词作为数组中的单独元素,那么您应该使用 \ 让我们举个例子

%w(Thanks for contributing an answer to Stack\ Overflow!)
Run Code Online (Sandbox Code Playgroud)

输出将是

=> ["Thanks", "for", "contributing", "an", "answer", "to", "Stack Overflow!"]
Run Code Online (Sandbox Code Playgroud)

这里 ruby​​ 解释器从输入中的空格中分割出段落。如果在单词结束后给 \ ,那么它将下一个单词与该单词合并并作为数组中的字符串类型元素推送。

如果可以使用如下

%w[2 4 5 6]
Run Code Online (Sandbox Code Playgroud)

如果你会使用

%w("abc" "def")
Run Code Online (Sandbox Code Playgroud)

那么输出将是

=> ["\"abc\"", "\"def\""]
Run Code Online (Sandbox Code Playgroud)