检查Ruby

时间:2015-12-30 08:42:04

标签: python ruby

我在检查ruby中的变量类型时遇到了问题。这是我想在ruby中复制的python示例代码。我想检查input类型:string,int还是list,然后继续执行特定的打印操作。

def printing (input):
    if type(input) == type(""):
        pass
    elif type(input) == type(1):
        pass
    elif type(input) == type([]):
        pass
    elif type(input) == type({}):
        pass
    elif type(input) == type(()):
        pass

我找不到在ruby中执行此操作的方法。下面的代码是我想要的样子。我假设我必须在案例阶段检查类型。

def printing (element)
    case element
    when element.type("")
        puts element
    when element.type(2)
        puts element
    when element.type({})
        element.each_pair { |name, val|  print "#{name} : #{value}"}
    when element.type([])
        element.each {|x| print x}
    end
end

2 个答案:

答案 0 :(得分:4)

我认为您正在寻找Object#class。这里:

case element
when String
 # do something
when Fixnum
 # do something
when Hash
 # do something
when Array
 # do something
end

这将使您的开关案例如下:

case

注意: 正如@ndn在下面的评论中提到的那样,.class语句中不应包含std::forward (我最初在答案中)You can find the explanation here

答案 1 :(得分:2)

这不是"正确答案",我只想指出你不应该在python中使用type应该使用isinstance而不是

isinstance(input, list) # test for list
isinstance(inpit, [float, int]) # test for number

如果您使用的是python 3,则可以检查抽象基类

import collections
isinstance(input, collections.abs.Sequence) # sequence = tuple, list and a lot of other stuff that behaves that way