【问题标题】:What is the %w "thing" in ruby?红宝石中的 %w “东西”是什么?
【发布时间】:2011-07-25 10:52:21
【问题描述】:

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

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

我有几个问题:

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

    1) 它是一个文字,它是一个%,然后是一个 r(正则表达式)、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!a s d f!
     => ["a", "s", "d", "f"] 
    
    ruby-1.9.2-p136 :009 > %w@a s d f@
     => ["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] 
    

    【讨论】:

    • 感谢您花时间回答。但是,Taum 提供的链接更完整。为努力+1。
    【解决方案2】:

    您可以使用多种形式的文字语法,几乎可以使用任何配对分隔符,请参阅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/
    

    【讨论】:

      【解决方案3】:
      • 那个 %w“东西”的正确名称是什么?操作员?文字?构造函数?

      实际上不确定,我猜是字符串编码的文字。

      • 使用 {} 代替 [] 是否重要?

      不。实际上,您几乎可以使用任何字符。如果您以{[( 开头,则需要以该字符的结尾对应物结尾,但其他字符以相同字符结尾。您可能希望使用不会出现在文字中的字符。

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        您是否使用 {} [] () 或 无关紧要,除非您的字符串包含此字符,例如:

        %q{a closing parenthesis: ")"}
        

        语法非常复杂,因此记住每个变体并不是很有用,但当您快速破解并希望避免手动处理转义字符时,它会派上用场。

        【讨论】:

        • 那个链接很好地回答了我的问题。谢谢!
        • 如果匹配,您可以在字符串中使用相同的分隔符:str = %q(hello (world)) #=> "hello (world)"
        猜你喜欢
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 2019-06-22
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 2011-04-26
        相关资源
        最近更新 更多