kol*_*osy 13 ruby ruby-on-rails
我很困惑:这几乎是一个RoR动作邮件程序指南的复制/粘贴,但它会引发语法错误:
class Contact < ActionMailer::Base
def contact a_name, a_company, a_phone, a_email, a_comments
subject "Contact request from #{name}"
recipients "some@address.com"
from "some_other@address.com"
sent_on Time.now
body { :name => a_name, :company => a_company, :phone => a_phone, :email => a_email, :comments => a_comments }
end
end
Run Code Online (Sandbox Code Playgroud)
错误是:
app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting '}' body { :name => a_name, :company => a_company... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...{ :name => a_name, :company => a_company, :phone => a_phone,... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...ompany => a_company, :phone => a_phone, :email => a_email, :... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ..., :phone => a_phone, :email => a_email, :comments => a_comme... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...email => a_email, :comments => a_comments, } ^
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我无法弄清楚我在这里做错了什么.
Nik*_*bak 28
添加括号body({...})以明确说明您正在使用哈希参数进行方法调用.
否则,{...}可能与在body方法中传递的函数(或lambda,无论是官方术语)混淆:body { puts "Hello world!" }
Dig*_*oss 11
卸下{和}从呼叫(1)到#body.
(1)更新:
发生此错误是因为{ }Ruby中有两个不同的含义:哈希值表达式和方法块.如果在诗歌模式中调用过程(没有parens),那么如果解析器{在方法名称之后遇到a ,则存在歧义.它是一个块的开头还是一个Hash表达式的参数?在你的具体案例中,一个不幸的假设是,这是一个障碍.
现在,{ }当哈希是方法的最后一个参数时,Ruby不需要使用Hash表达式.所以结果是至少有两种方法可以解决这个问题:(1)删除{和}- Ruby知道你传递了一个Hash参数; 或(2)添加方法parens.看看如何在诗歌模式中使用Rails,删除字符并利用聪明的Ruby解析器而不是将它们添加回la C或Java似乎是有意义的.
| 归档时间: |
|
| 查看次数: |
12518 次 |
| 最近记录: |