尝试创建第一个Sinatra扩展时出现错误
问题描述:
我正在第一次钻研Ruby和Sinatra,并穿过Alan Harris和Konstatin Haase的“Sinatra Up and Running”。在对我的Ruby版本进行分类(使用RVM)之后,创建扩展时,我没有遇到第3章中的任何问题。代码如下(post_get.rb):尝试创建第一个Sinatra扩展时出现错误
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
但是,每当我跑 “红宝石post_get_test.rb” 我得到以下运行时错误立即:
[email protected]:~/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>'
我不太清楚,即使从哪里开始整理出来。有人能指出我正确的方向来解决这个问题吗?
谢谢。
答
您发布的代码是正确的,但与错误消息中报告的代码不同。
在错误消息导致错误看起来就像这样的线:
get (route, &block)
和
post (route, &block)
注意get
或post
和开口(
之间的空间。在Ruby中,当调用方法并使用括号时,方法名称和左括号之间不得有空格(如问题中的代码块)。
请确保在您的实际代码中此处没有空格,您应该没问题。
发生了什么事是红宝石试图解析什么是包含在括号,并将结果传递作为只参数的方法,而不是利用他们的内容作为参数列表。
在第一个代码块中复制时我有点sl but,但我已经编辑它以显示正确的空白区域。我已经改变了一点空白空间,但是我所做的一切似乎都不会影响我收到的错误消息。 – rsgoheen 2013-04-08 07:03:49
就是这样。我没有意识到Ruby对这种空白非常敏感。谢谢。 – rsgoheen 2013-04-08 17:10:52