Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 神秘的ruby语法错误_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 神秘的ruby语法错误

Ruby on rails 神秘的ruby语法错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,我不再困惑了:这几乎是一个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

我不再困惑了:这几乎是一个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
有什么想法吗?我不知道我做错了什么。

添加括号
body({…})
以明确说明您正在使用散列参数进行方法调用


否则,
{…}
可能会与
body
方法中传递的函数(或lambda,不管是什么官方术语)相混淆:
body{put“Hello world!”

从调用(1)到
#body
中删除
{/code>和
}/code>


(1)更新: 发生此错误是因为在Ruby中,
{}
有两种不同的含义:散列值表达式和方法块。如果在poetry模式下调用过程(无parens),那么如果解析器遇到
{
在方法名之后。它是块的开头还是散列表达式的参数?在您的特定情况下,一个不幸的假设是它是块。

现在,正如所发生的那样,Ruby不需要
{}
当散列是方法的最终参数时,围绕散列表达式。因此,至少有两种方法可以解决此问题:(1)删除
{
}
--Ruby知道您正在传递散列参数;或(2)添加方法parens。鉴于Rails通常在诗歌模式中使用,删除字符并利用聪明的Ruby解析器而不是将它们添加回la C或Java似乎是有意义的。

或者,正如@NikitaRybak所建议的,添加括号。它不会与lambda混淆,而是一个块。
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, } ^