2015-10-04 23 views
3

我有一个方法Embed.toggler需要一个散列参数。用下面的代码,我试图在散列中使用heredoc。使用heredoc作为散列值

   Embed.toggler({ 
        title: <<-RUBY 
         #{entry['time']} 
         #{entry['group']['who'] 
         #{entry['name']} 
        RUBY 
        content: content 
       }) 

不过,我发现了以下错误跟踪:

syntax error, unexpected ':', expecting tSTRING_DEND 
         content: content 
           ^
can't find string "RUBY" anywhere before EOF 
syntax error, unexpected end-of-input, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END 
         title: <<-RUBY 
            ^

我怎样才能避免收到此错误?

+0

你的问题是什么? – sawa

+0

@sawa我如何让给定的代码工作,并防止错误。 – maxple

回答

14

添加一个逗号您<<-RUBY后:

Embed.toggler({ 
    title: <<-RUBY, 
     #{entry['time']} 
     #{entry['group']['who'] 
     #{entry['name']} 
    RUBY 
    content: content 
}) 

这样做一般的工作。我不知道为什么它不能在我的代码中工作。

它没有工作,因为需要哈希键/值对用逗号隔开,像{title: 'my title', content: 'my content' }和你的代码只是没有逗号。由于繁琐的HEREDOC语法,很难看到这一点。

您是否知道是否有方法对字符串执行操作?

你在玩火。它总是安全的(且通常清洁剂)中提取的变量和一个变量本身做后期处理:

title = <<-RUBY 
    #{entry['time']} 
    #{entry['group']['who'] 
    #{entry['name']} 
RUBY 

Embed.toggler(title: title.upcase, content: content) 

但是,如果你今天觉得危险,你可以添加操作打开HEREDOC文字后,就像你已经添加逗号:

Embed.toggler({ 
    title: <<-RUBY.upcase, 
     #{entry['time']} 
     #{entry['group']['who'] 
     #{entry['name']} 
    RUBY 
    content: content 
}) 

但我鼓励你,是因为它破坏了可读性。

+1

@sawa嗯,我注意到在发布的代码中的语法错误,并认为这是问题:) –

+1

我注意到了语法错误,但不知道问题是从我+1。 – sawa

+0

这确实可以工作。我不知道为什么它不能在我的代码中工作。你知道是否有方法对字符串执行操作?即'{title:<< - TXT asd TXT.upcase}' – maxple