2015-01-09 81 views
0

我想在声明红宝石散列时使用其他变量的值。正如我所料,这些价值现在正在逃脱。我怎样才能解决这个问题?在散列中转义红宝石值

变量

ipa_url,名称,版本和捆绑标识符

代码

data = { 
      plist: { 
       dict: { 
       key: 'items', 
       array: { 
        dict: { 
        key: %w('assets','metadata'), 
        array: { 
         dict: [{ key: %w('kind','url'), 
           string: %w('software-package', 
              "#{ipa_url") }, 
          { key: %w('kind','url'), 
           string: %w('display-image',"#{icon_url.to_s}") }, 
          { key: %w('kind','url'), 
           string: %w('full-size-image', 
              "#{icon_url}") }], 
         dict: { key: %w('bundle-identifier','bundle-version', 
             'kind','title'), 
           string: %w("#{bundle-identifier}","#{version}", 
             'software',"#{name}") 
         } 
        } 
        } 
       } 
       } 
      } 
      } 
+3

你确定你的意思是'%w('assets','metadata')'?难道你不是真的想'%w(资产元数据)'或'['assets','metadata']'? –

+0

@ muistooshort你是对的,谢谢 –

+1

当提出这样的问题时,将你的数据样本减少到最低限度,以便有效地证明问题。除此之外的任何事情都会减慢我们帮助你的能力。 –

回答

3

%w标识符被用来创建数组了空间分隔符的文本:

%w(this is a test) 
# => ["this", "is", "a", "test"] 

如果你想用串插在那里,你应该使用%W代替:

variable = 'test' 
%W(this is a #{variable}) 
# => ["this", "is", "a", "test"] 
1

zenspider越过对此进行了详细,但对SO的目的,这里的崩溃:

%Q(无内插)

[6] pry(main)> hey 
=> "hello" 
[7] pry(main)> hash = { 'hi' => %q("#{hey}", 'how are you') } 
=> {"hi"=>"\"\#{hey}\", 'how are you'"} 

%Q(内插和反斜杠)

[8] pry(main)> hash = { 'hi' => %Q("#{hey}", 'how are you') } 
=> {"hi"=>"\"hello\", 'how are you'"} 

%(内插和反斜杠)

[9] pry(main)> hash = { 'hi' => %("#{hey}", 'how are you') } 
=> {"hi"=>"\"hello\", 'how are you'"} 

%W(内插)作为Uri显示的

[7] pry(main)> hash = { 'hi' => %W(#{hey} how are you) } 
=> {"hi"=>["hello", "how", "are", "you"]}