从Ruby编程中复制此代码并在rubyfiddle.com中运行它。获取语法错误而不是#=> 21?任何帮助表示赞赏!
arr = [ 1, 1, 2, 3, 5, 8, 13, 21, 34 ]
res = arr.bsearch do |val|
case
when val < 19 then +1
when val > 23 then -1
else 0
end
end
res # => 21
答案 0 :(得分:2)
我自己测试了你的代码,你所写的内容没有任何问题。很可能你(或者在这种情况下,codecademy)使用旧版本的Ruby。 bsearch
方法在Ruby 2.0中的Array
和Range
上定义。在Ruby 2.0之前,有几个宝石可用于在阵列上执行二进制搜索。
要测试您使用的是哪个版本的Ruby,请在irb
或您的codecademy控制台中输入以下内容:
> RUBY_VERSION
=> "2.1.1"
如果返回的数字小于"2.0"
,bsearch
或Array
Range
本地定义
答案 1 :(得分:0)
正如您在其中一条评论中指定的那样,确切的错误是:
(eval):48: undefined method `bsearch' for [1, 1, 2, 3, 5, 8, 13, 21, 34]:Array (NoMethodError)
此错误表示bsearch
的方法Array
不存在。
> RUBY_VERSION
=> "1.8.7"
Ruby 1.8.7
中没有bsearch
bsearch
已在Ruby 2.0
中实施。