【问题标题】:Ruby Array #bsearch syntax error from Programming Ruby?Ruby Array #bsearch 来自 Programming Ruby 的语法错误?
【发布时间】:2015-09-07 00:39:14
【问题描述】:

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

【问题讨论】:

  • 确切的语法错误是什么?
  • @Pavan 输出语法错误:
  • 您能否复制错误或错误行并将其发布在您的问题中。
  • 你的 Ruby 版本是多少?
  • 代码写得很奇怪,格式也更奇怪,但我没有在代码中看到任何语法错误。请提供导致语法错误的准确代码,告诉我们哪一行错误发生并提供准确错误消息。

标签: ruby bsearch


【解决方案1】:

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

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

> RUBY_VERSION
=> "2.1.1" 

如果返回的数字小于"2.0",则bsearch 将不会被原生地定义为Array 或Range

【讨论】:

  • @JörgWMittag 是的,如果您阅读 OP 的 cmets,错误是 undefined method 'bsearch' for [1, 1, 2, 3, 5, 8, 13, 21, 34]:Array(NoMethodError)
【解决方案2】:

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

(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中实现。

【讨论】:

  • @user3222947 在其中一条评论中指定的确切错误是(eval):48: undefined method 'bsearch' for [1, 1, 2, 3, 5, 8, 13, 21, 34]:Array (NoMethodError)
  • @JörgWMittag,我在答案中添加了指定的错误。
  • 这不是语法错误 (SyntaxError),而是语义错误 (NoMethodError)。 OP 三次提到他也遇到了语法错误,那是我很困惑。 NoMethodError 很明显。
  • @JörgWMittag,你有它。问题中的syntax error 仅表示error。那么错误也应该在问题中指定,但只写在评论部分。这里有很多误导性的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多