使用detect或find时出现语法错误

时间:2016-01-19 13:23:06

标签: arrays ruby

我正在研究一个模块,该模块读取一个二维数组,匹配第一个项目,然后返回数组。我试图同时使用detect和find,但两者都返回相同的语法错误:

syntax error, unexpected == (SyntaxError) 

on

result = @list.find {|item| item|0| == name}

使用列表或检测。我的代码如下:

require 'csv'

class Nutrition
    include Enumerable
    @list = CSV.read("./lib/list.csv")


    def self.search(name)
      result = @list.find {|item| item|0| == name}
      if result.nil?
        result = "error"
      end
      result    
    end
end

我在运行rake测试时只收到错误消息。这是我的rake文件

require './lib/nutrition.rb'
require "test/unit"
require 'csv'


class TestNutrition < Test::Unit::TestCase
  include Enumerable
  def test_carbs()
    assert_equal(Nutrition.search('onion'), "13.75")
    assert_equal(Nutrition.search('ham'),'0')
    assert_equal(Nutrition.search('sawdust'), 'error')
  end

end

当我在代码中调用模块时,一切似乎都有效。

2 个答案:

答案 0 :(得分:1)

更改以下行:

result = @list.find {|item| item[0] == name}

注意方括号以访问数组索引0。

答案 1 :(得分:0)

使用[ ]访问数组元素。不是| |

在这一行:

result = @list.find {|item| item|0| == name}

使用曲线括号[],如下所示:

result = @list.find {|item| item[0] == name}

您的代码必须如下所示:

def self.search(name)
  result = @list.find {|item| item[0] == name}
  if result.nil?
    result = "error"
  end
  result    
end