【发布时间】:2014-09-10 20:29:42
【问题描述】:
这是一个基于数组元素实例属性的简单索引搜索:
chips = [Chip.new(:white), Chip.new(:black)]
color = :white
idx = chips.index { |chip| chip.color == color }
无论@chips 数组中的值是什么,也无论局部变量color 设置为什么,这总是返回nil。如果将color 替换为诸如:white 之类的显式符号(这是预期会找到的示例索引),这仍然适用。
这是类声明:
class Chip
attr_reader :color, :value
def initialize(color)
@color = color
case color
when :white
@value = 1
when :red
@value = 5
when :green
@value = 25
when :black
@value = 100
end
end
end
有人知道为什么会这样吗?
【问题讨论】:
-
color是什么类型? -
试试
@chips.each{|chip| p chip.color},看看你会得到什么。 -
该示例在使用“p”时有效。但是,它只是暂时解决了问题。我不需要输出,因为我搜索的数组比较大。
-
@chips是Chip类实例的数组。color是:white、:red、:green或:black类型的符号。 -
我无法复制您的问题。它适用于我,使用包含
color访问器的 Chip 类。
标签: ruby arrays loops variables ruby-2.1