我第一次钻研Ruby和Sinatra,并通过Alan Harris和Konstatin Haase的“Sinatra Up and Running”。在整理出我的Ruby版本(使用RVM)之后,在创建扩展时,我在第3章没有遇到任何问题。代码如下(post_get.rb):
require 'sinatra/base'
module Sinatra
module PostGet
def post_get (route, &block)
get (route, &block)
post (route, &block)
end
end
register PostGet
end
与(post_get_test.rb)一起使用:
require 'sinatra'
require './post_get'
post_get '/' do
"Hello #{params[:names]}"
end
但是,每当我运行“ruby post_get_test.rb”时,我立即得到以下运行时错误:
user@UbuntuOne:~/sinatra$ ruby post_get_test.rb
/home/user/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': /home/user/sinatra/post_get.rb:6: syntax error, unexpected ',', expecting ')' (SyntaxError)
get (route, &block)
^
/home/user/sinatra/post_get.rb:7: syntax error, unexpected ',', expecting ')'
post (route, &block)
^
/home/user/sinatra/post_get.rb:13: syntax error, unexpected $end, expecting keyword_end
from /home/user/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from post_get_test.rb:2:in `<main>'
我不太确定从哪里开始整理这个。有人能指出我正确的方向来解决这个问题吗?
感谢。
答案 0 :(得分:2)
您发布的代码是正确的,但与错误消息中报告的代码不同。
在错误消息中,导致错误的行如下所示:
get (route, &block)
和
post (route, &block)
请注意get
或post
与开场(
之间的空格。在Ruby中调用方法并使用括号时,方法名称和左括号之间不能有空格(如问题中的代码块)。
确保在您的实际代码中此时没有空格,您应该没问题。
正在发生的事情是Ruby正在尝试解析括号中包含的内容并将结果作为 only 参数传递给方法,而不是将它们的内容用作参数列表。 / p>