0

在 Javascript 中,如果我想对数组索引进行类型检查,我可以这样做:

var array = [1,2,3,4,"the monster from the green lagoon"]

for (i=0;  i < array.length;  i++) {

    if (typeof(array[i]) === 'number')      {
    console.log("yes these are all numbers");

    }

    else        {
    console.log("Index number " + i + " is " +  array[i] +": No this is not a number");

    }

}

在 Ruby 中,我不明白如何做到这一点。我正在尝试对整数进行检查。我知道在 Ruby 世界中,使用 each 方法被认为是一种很好的礼仪,因此基本循环是这样的:

array = [1, 2, 3, 4, 5, 6]
array.each { |x| puts x }

我感到困惑的部分是语法是外来的,我不清楚逻辑在哪里。我还没有进行实际的类型检查,但从我读到的内容来看,它将与Integer类型进行比较:

if array[i] == Integer

谢谢你。

4

3 回答 3

8
a = [1,2,3,4,5]
a.all? { |x| x.is_a? Integer } 
于 2013-05-20T07:43:45.200 回答
1

这将是最直接的,而且不会嘈杂。

array.all? {|x| x.is_a? Numeric}

我在这里使用数字而不是整数,因为您的日志暗示您正在尝试确保它是数字,不一定是整数。所以这将允许 Float、Integer、BigDecimal 等。

基于该答案,一般而言,您可以将其作为一个组报告给日志。

如果您想记录单个项目,那么使用each或者也许each_with_index是要走的路。

 array.each_with_index {|x, i| $LOG.puts "element at #{i} that is #{x.inspect} is not a number" unless x.kind_of? Numeric }
于 2013-05-20T08:14:14.650 回答
0

测试时object == Integer,您是在说Is my object, the Integer class?但您想知道 object 是否是此类的实例,而不是类本身。

在 Ruby 中,要测试实例的类,您可以这样做

Integer === object
object.is_a?(Integer)
object.instance_of?(Integer)
object.kind_of?(Integer) # returns true when object is a subclass of Integer too !
object.class == Integer

※顺便说一句,2.class => Fixnum
你可以看到你的对象的类

array = [1, 2, 3, 4, 5, 6]
array.each { |x| puts x.class }
于 2013-05-20T07:44:41.643 回答