编程Ruby中的Ruby Array #bsearch语法错误?

时间:2014-05-06 15:37:26

标签: ruby bsearch

从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​

2 个答案:

答案 0 :(得分:2)

我自己测试了你的代码,你所写的内容没有任何问题。很可能你(或者在这种情况下,codecademy)使用旧版本的Ruby。 bsearch方法在Ruby 2.0中的ArrayRange上定义。在Ruby 2.0之前,有几个宝石可用于在阵列上执行二进制搜索。

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

> RUBY_VERSION
=> "2.1.1" 

如果返回的数字小于"2.0"bsearchArray

将无法Range本地定义

答案 1 :(得分: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"

Ruby 1.8.7中没有bsearch bsearch已在Ruby 2.0中实施。