什么%i或%我做红宝石?

时间:2017-10-31 16:02:40

标签: ruby-on-rails ruby

红宝石中%i或%I的含义是什么?

我搜索了谷歌

"%i or %I" ruby

但没有发现任何与红宝石有关的内容。

3 个答案:

答案 0 :(得分:45)

%i[ ] # Non-interpolated Array of symbols, separated by whitespace
%I[ ] # Interpolated Array of symbols, separated by whitespace

我的搜索结果中的第二个链接http://ruby.zigzo.com/2014/08/21/rubys-notation/

IRB中的例子:

%i[ test ]
# => [:test]
str = "other"
%I[ test_#{str} ]
# => [:test_other] 

答案 1 :(得分:5)

很难找到官方的Ruby文档(it's here)。在撰写本文时,当前版本为2.5.1,%i构造的文档可在Ruby's literals.的文档中找到

Ruby的%构造有一些令人惊讶的(至少对我来说!)变体。有一些常用的%i %q %r %s %w %x表单,每个表单都有一个大写版本来启用插值。 (有关解释,请参阅Ruby literals docs

但您可以使用多种类型的分隔符,而不仅仅是[]。你可以使用任何类型的括号() {} [] <>你可以使用(引用ruby文档)“百分比字符串分隔符的大多数其他非字母数字字符,例如”%“,”| “,”“^”等。“

因此%i% bish bash bosh %%i[bish bash bosh]

的作用相同

答案 2 :(得分:4)

%w%W类似'"

x = :test

# %w won't interpolate #{...} style strings, leaving as literal
%w[ #{x} x ]
# => ["\#{x}", "x"]

# %w will interpolate #{...} style strings, converting to string
%W[ #{x} x ]
# => [ "test", "x"]

现在与%i%I相同:

# %i won't interpolate #{...} style strings, leaving as literal, symbolized
%i[ #{x} x ]
# => [:"\#{x}", :x ]

# %w will interpolate #{...} style strings, converting to symbols
%I[ #{x} x ]
# => [ :test, :x ]