Ruby 如何判断传递给函数的参数是数字列表还是数字列表?

Ruby 如何判断传递给函数的参数是数字列表还是数字列表?,ruby,Ruby,我有以下方法: def get_width(arg) return arg[0] end def get_height(arg) return arg[1] end arg的格式为[200400]或[200400]、[300600]、[150780]、…]如果是前者,则我的函数可以工作。但如果是后者,我只想使用第一个条目。如何执行此操作?您可以使用函数获取类型 def get_width(arg) if arg[0].is_a? Array return arg[

我有以下方法:

def get_width(arg)
    return arg[0]
end

def get_height(arg)
    return arg[1]
end

arg
的格式为
[200400]
[200400]、[300600]、[150780]、…]
如果是前者,则我的函数可以工作。但如果是后者,我只想使用第一个条目。如何执行此操作?

您可以使用函数获取类型

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

您可以使用函数获取类型

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

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
试试这个:

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
另一种方式:

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]
注:

另一种方式:

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]
注:


无需复制不必要的
返回值
:)
arg[0]。_是?(数组)吗?arg[0][0]:arg[0]
必须返回,以明确显示要返回的内容。消除它会复制不必要的想法。@JonCrowell-事实上,惯用ruby不需要
return
语句,熟练的ruby开发者习惯性地跳过它。我把代码尽可能与您的相似,只是为了突出实际的解决方案,而不是重构OP CODESY,我知道返回语句不是必需的,并且熟练的Ruuistor习惯性地跳过它——我认为这是一个错误效率的好例子。不需要复制不必要的<代码>返回<代码> >:<代码> ARG〔0〕。._是?(数组)吗?arg[0][0]:arg[0]
必须返回,以明确显示要返回的内容。消除它会复制不必要的想法。@JonCrowell-事实上,惯用ruby不需要
return
语句,熟练的ruby开发者习惯性地跳过它。我把代码尽可能与您的相似,只是为了突出实际的解决方案,而不是重构OP CODESY,我知道不需要返回语句,熟练的Ruuistor习惯性地跳过它——我认为这是一个假效率的好例子。