-2

从 Programming Ruby 中复制此代码并在 ruby​​fiddle.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​
4

2 回答 2

2

自己测试过你的代码,你写的没有错。您(或在本例中为 codecademy)很可能使用的是旧版本的 Ruby。该bsearch方法是在 Ruby 2.0中定义Array的。Range在 Ruby 2.0 之前,有几个 gem 可用于对数组执行二进制搜索。

要测试您使用的 Ruby 版本,请在irb您的 codecademy 控制台中输入以下内容:

> RUBY_VERSION
=> "2.1.1" 

如果返回的数字小于"2.0",bsearch将不会被原生定义为ArrayorRange

于 2014-05-06T16:01:08.770 回答
0

正如您在评论之一中指定的那样,确切的错误是:

(eval):48: undefined method `bsearch' for [1, 1, 2, 3, 5, 8, 13, 21, 34]:Array (NoMethodError)

此错误表示该方法bsearch不存在于Array.


labs.codecademy.com

 > RUBY_VERSION
=> "1.8.7"

bsearch中没有Ruby 1.8.7
bsearch已在Ruby 2.0.

于 2014-05-06T15:59:44.347 回答