zoukankan      html  css  js  c++  java
  • 转载: 关于ruby中 %Q, %q, %W, %w, %x, %r, %s 的用法 兰猫

    单引号内的内容,ruby会原样输出

    双引号内的内容,ruby会解析

    我们看个简单的例子,针对字符串      #{foo}test     我们分别用单引号核双引号操作

     '#{foo}test'
    
    => "\#{foo}test"
    

      

    "#{foo}test"
    
    NameError: undefined local variable or method `foo' for main:Object
            from (irb):4
            from C:/Ruby192/bin/irb:12:in `<main>'
    

    显而易见, 双引号对字符串内的#进行了解析, 导致ruby认为foo是个方法,出错.

    类似的, %W %Q 相当于双引号,   %w %q 相当于单引号.


    转载: http://simpleror.wordpress.com/2009/03/15/q-q-w-w-x-r-s/  

    %Q

    This is an alternative for double-quoted strings, when you have more quote characters in a string.Instead of putting backslashes in front of them, you can easily write:
    >> %Q(Joe said: "Frank said: "#{what_frank_said}"")
    => "Joe said: "Frank said: "Hello!"""

    The parenthesis “()” can be replaced with any other non-alphanumeric characters and non-printing characters (pairs), so the following commands are equivalent:
    >> %Q!Joe said: "Frank said: "#{what_frank_said}""!
    >> %Q[Joe said: "Frank said: "#{what_frank_said}""]
    >> %Q+Joe said: "Frank said: "#{what_frank_said}""+

    You can use also:
    >> %/Joe said: "Frank said: "#{what_frank_said}""/
    => "Joe said: "Frank said: "Hello!"""

    %q

    Used for single-quoted strings.The syntax is similar to %Q, but single-quoted strings are not subject to expression substitution or escape sequences.
    >> %q(Joe said: 'Frank said: '#{what_frank_said} ' ')
    => "Joe said: 'Frank said: '\#{what_frank_said} ' '"

    %W

    Used for double-quoted array elements.The syntax is similar to %Q
    >> %W(#{foo} Bar Bar\ with\ space)
    => ["Foo", "Bar", "Bar with space"]

    %w

    Used for single-quoted array elements.The syntax is similar to %Q, but single-quoted elements are not subject to expression substitution or escape sequences.
    >> %w(#{foo} Bar Bar\ with\ space)
    => ["\#{foo}", "Bar", "Bar with space"]

    %x

    Uses the ` method and returns the standard output of running the command in a subshell.The syntax is similar to %Q.
    >> %x(echo foo:#{foo})
    => "foo:Foo\n"

    %r

    Used for regular expressions.The syntax is similar to %Q.
    >> %r(/home/#{foo})
    => "/\\/home\\/Foo/"

    %s

    Used for symbols.It’s not subject to expression substitution or escape sequences.
    >> %s(foo)
    => :foo
    >> %s(foo bar)
    => :"foo bar"
    >> %s(#{foo} bar)
    => :"\#{foo} bar"

  • 相关阅读:
    Codeforces 691A Fashion in Berland
    HDU 5741 Helter Skelter
    HDU 5735 Born Slippy
    HDU 5739 Fantasia
    HDU 5738 Eureka
    HDU 5734 Acperience
    HDU 5742 It's All In The Mind
    POJ Euro Efficiency 1252
    AtCoder Beginner Contest 067 C
    AtCoder Beginner Contest 067 D
  • 原文地址:https://www.cnblogs.com/ilazysoft/p/2184701.html
Copyright © 2011-2022 走看看