我正在尝试创建一个方法来确定对象(在数组中)是否存在,以及它是否为Numeric。
我目前的代码是:
foo = [123, 456, 789, 012]
if defined?(foo[0]) and foo[0].is_a? Numeric
foo_at_zero = foo[0]
else
foo_at_zero = "N/A"
puts "Cannot find data for foo at place zero"
end
puts foo_at_zero
然而,我的结果并非我所期望的。当我将if defined?
更改为我尚未定义的数组中的元素时,它仍然返回true:
foo = [123, 456, 789, 012]
if defined?(foo[100]) and foo[0].is_a? Numeric
foo_at_zero = foo[0]
else
foo_at_zero = "N/A"
puts "Cannot find data for foo at place zero"
end
puts foo_at_zero
返回foo[0].
if defined?
似乎无法正确测试对象是否存在。有什么我想念的吗?
答案 0 :(得分:1)
如果你检查defined?(foo[100])
正在返回什么,它实际上不是false
,它返回的是它正在评估的表达式(foo[100]
)是一个方法(已定义) class Array:
puts defined?(foo[100]) => method
为了您的练习,我相信这对您有用:
foo = [123, 456, 789, 012]
if (foo[100] != nil) and (foo[0].is_a? Numeric)
foo_at_zero = foo[0]
else
foo_at_zero = "N/A"
puts "Cannot find data for foo at place zero"
end
puts foo_at_zero
检查if foo[100] != nil
,您将知道其中的元素是否已定义。
<强>更新强> 我会做这样的事情:
foo = [123, 456, 789, 012]
def validate value
foo_at_zero = "N/A"
if (value != nil) and (value.is_a? Numeric)
foo_at_zero = value
end
return foo_at_zero
end
puts validate foo[0]