几乎从这个单词中逐字输入了代码,并收到以下语法错误消息。请帮忙!!
https://github.com/visionmedia/google-search/blob/master/examples/web.rb
我的代码:
require "rubygems"
require "google-search"
def find_item uri, query
search = Google::Search::Web.new do |search|
search.query = query
search.size = :large
search.each_response {print "."; #stdout.flush}
end
search.find {|item| item.uri =~ uri}
end
def rank_for query
print "%35s " % query
if item = find_item(/vision\-media\.ca/, query)
puts " #%d" % (item.index +1)
else
puts " Not found"
end
end
rank_for "Victoria Web Training"
rank_for "Victoria Web School"
rank_for "Victoria Web Design"
rank_for "Victoria Drupal"
rank_for "Victoria Drupal Development"
错误讯息:
Ruby Google Search:9: syntax error, unexpected keyword_end, expecting '}'
Ruby Google Search:11: syntax error, unexpected keyword_end, expecting '}'
Ruby Google Search:26: syntax error, unexpected $end, expecting '}'
答案 0 :(得分:2)
你无意中评论了第9行的其余部分:
search.each_response {print "."}
请注意,Ruby中的#
字符表示注释;即,#
包含右侧同一行的所有内容都被视为注释,并且不会编译为Ruby代码。
print 'this ' + 'is ' + 'compiled'
#=> this is compiled
print 'this' # + 'is' + 'not'
#=> this
请注意,括号{}
表示法封装了块中包含的单个可执行行。但是,您要做的是执行两个命令。为此,使用Ruby的block
表示法可能在语义上更具可读性:
search.each_response do
print '.'
STDOUT.flush
end
答案 1 :(得分:0)
而不是#stdout.flush
,请输入$stdout.flush
。
答案 2 :(得分:-1)
find_item
中do块的最后一行是:
search.each_response {print "."; #stdout.flush}
Ruby中的#
标志着评论的开始。您已经注释掉了该行的其余部分,但在打开括号{
之前没有注释掉。缺少它被关闭是你的错误的来源。
为了使您的代码正确,您应该将#
更改为$
以访问全局标准输出对象。