如何判断传递给我的函数的参数是一个数字列表,还是一个数字列表列表?

时间:2014-12-17 17:41:26

标签: ruby

我有这些方法:

def get_width(arg)
    return arg[0]
end

def get_height(arg)
    return arg[1]
end

arg可以是[200, 400]形式,也可以是[[200, 400], [300, 600], [150,780], ...]形式。如果是前者,我的功能会起作用。但如果是后者,我只想使用第一个条目。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

您可以使用函数来获取类型。

def get_width(arg)
  if arg[0].is_a? Array
    return arg[0][0]
  else
    return arg[0]
  end
end

答案 1 :(得分:2)

试试这个:

def get_width(arg)
    arg = arg[0] if arg[0].is_a? Array
    return arg[0]
end

def get_height(arg)
    arg = arg[0] if arg[0].is_a? Array
    return arg[1]
end

答案 2 :(得分:0)

另一种方式:

def width_and_height(arr)
    [*arr.first].first, [*arr.last].first
end  

a = [200, 400]
b = [[200, 400], [300, 600]] 

width_and_height(a) #=> [200, 400]
width_and_height(b) #=> [200, 300]

注意:

[*[200, 400].first].first
  #=> [*200].first
  #=> [200].first
  #=> 200

[*[[200, 400], [300, 600]].first].first
  #=> [*[200, 400]].first
  #=> [200, 400].first
  #=> 200