ruby中%w“东西”是什么?

我指的是%w运算符/构造函数/无论你怎么称呼它,像这样使用:

%w{ foo bar baz } => ["foo", "bar", "baz"] 

我有几个问题:

  • 那个%w “东西”的正确名称是什么? 操作? 文字? 构造函数?
  • 我是否使用{} s而不是[] s是否重要?
  • 还有其他类似的东西(例如,一个给你一个符号数组的东西)?
  • 它们可以嵌套(在另一个%w内一个%w ,以便创建嵌套数组)?
  • 我在哪里可以找到有关它的文档?

不确定“官方”文档,但这非常好: http : //en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation

无论你使用{} []()还是<>都没关系,除非你的字符串包含这个字符,例如:

 %q{a closing parenthesis: ")"} 

语法非常复杂,因此记住每个变体都不是很有用,但是当你快速入侵并且想要避免手动处理转义字符时它会派上用场。

1)它是一个小的,它是一个%然后是ar(正则表达式),w(数组),q(字符串)等来表示不同的文字。

2)

 ruby-1.9.2-p136 :001 > %w{1 2 3} => ["1", "2", "3"] ruby-1.9.2-p136 :002 > %w[1 2 3] => ["1", "2", "3"] ruby-1.9.2-p136 :008 > %w!asdf! => ["a", "s", "d", "f"] ruby-1.9.2-p136 :009 > %w@asdf@ => ["a", "s", "d", "f"] 

所以你可以看到你可以使用任何字符,只要它标记内容的开头和结尾。

3)

以下是其他一些例子:

字符串:(%q或%Q)

 ruby-1.9.2-p136 :016 > %Q[ruby is cool] => "ruby is cool" ruby-1.9.2-p136 :017 > %q[ruby is "cool"] => "ruby is \"cool\"" 

正则表达式:(%r)

 ruby-1.9.2-p136 :019 > %r[(\w+)] => /(\w+)/ 

系统命令:(%x)

 ruby-1.9.2-p136 :020 > %x[date] => "Tue Mar 29 12:55:30 EDT 2011\n" 

4)它们不能嵌套,因为%w表示空格分割数组。 所以,如果你尝试做多级,它看起来像这样:

 ruby-1.9.2-p136 :003 > %w{1 %w{2 3 4} 5} => ["1", "%w{2", "3", "4}", "5"] 

要实现此目的,您需要使用更详细的语法:

 ruby-1.9.2-p136 :011 > [1, [2,3,4], 5] => [1, [2, 3, 4], 5] 

您可以使用各种forms的文字语法 ,几乎任何配对分隔符,请参阅http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html :

 %w[one two three] # == ["one", "two", "three"] %[one two three] # == "one two three" %[one "two" three] # == "one \"two\" three" %r[one two three] # == /one two three/ 
  • 那个%w“东西”的正确名称是什么? 操作? 文字? 构造函数?

不太确定,我想是字符串编码的文字。

  • 我是否使用{} s而不是[] s是否重要?

不。 你几乎可以使用任何角色。 如果你以{[或者你需要关闭该字符的结束对象,但是其他字符用相同的字符关闭。你可能想要使用一个不会出现在你的文字中的字符。

 %w_ foo bar _ 
  • 还有其他类似的东西(例如,一个给你一个符号数组的东西)?

不是一个符号数组,但是单引号字符串有%q ,双引号字符串有%Q ,正则表达式有%r ,可能还有其他几个我忘了。

  • 它们可以“嵌套”(另一个%w中的一个%w,以便创建嵌套数组)?

不。 它们用于快速简便地创建简单对象。 如果需要嵌套,则需要使用更详细的语法。