我在检查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
答案 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