如何编写Ruby方法来处理零个,一个或多个输入?

如何编写Ruby方法来处理零个,一个或多个输入?,第1张

概述我有一个类似于以下的 Ruby方法: # Retrieve all fruits from basket that are of the specified kind.def fruits_of_kind(kind) basket.select { |f| f.fruit_type == kind.to_s }end 现在,您可以这样称呼: fruits_of_kind(:apple) 我有一个类似于以下的 Ruby方法:

# RetrIEve all fruits from basket that are of the specifIEd kind.def fruits_of_kind(kind)  basket.select { |f| f.fruit_type == kind.to_s }end

现在,您可以这样称呼:

fruits_of_kind(:apple)    # => all apples in basketfruits_of_kind('banana')  # => all bananas in basket

等等.

如何更改方法以便正确处理可迭代输入以及无输入和零输入?例如,我希望能够支持:

fruits_of_kind(nil) # => nilfruits_of_kind(:apple,:banana)    # => all apples and bananas in basketfruits_of_kind([:apple,'banana']) # => likewise

这可能是惯用的吗?如果是这样,编写方法的最佳方法是什么,以便它们可以接受零个,一个或多个输入?

解决方法
def fruits_of_kind(kind)    return nil if kind.nil?    result = []    ([] << kind).flatten.each{|k| result << basket.select{|f| f.fruit_type == k.to_s }}    resultend

‘splat’运算符可能是最好的方法,但有两点需要注意:传入nil或列表.要修改pesto针对您想要的输入/输出的解决方案,您应该执行以下 *** 作:

def fruits_of_kind(*kinds)  return nil if kinds.compact.empty?   basket.select do |fruit|    kinds.flatten.each do |kind|      break true if fruit.fruit_type == kind.to_s    end == true #if no match is found,each returns the whole array,so == true returns false  endend

如果传入nil,*将其转换为[nil].如果你想返回nil而不是空列表,你必须将它(删除空值)压缩为[],然后如果它为空则返回nil.

如果你传入一个列表,比如[:apple,’banana’],*将它转换为[[:apple,’banana’]].这是一个细微的差别,但它是一个包含另一个列表的单元素列表,因此您需要在执行“每个”循环之前展平各种类型.展平会将其转换为[:apple,就像您期望的那样,并为您提供您正在寻找的结果.

编辑:更好,感谢格雷格坎贝尔:

def fruits_of_kind(basket,kind)       return nil if kind.nil?       kind_List = ([] << kind).flatten.map{|kind| kind.to_s}       basket.select{|fruit| kind_List.include?(fruit) }    end

或(使用splat)

def fruits_of_kind(*kinds)       return nil if kinds.compact.empty?       kind_List = kinds.flatten.map{|kind| kind.to_s}       basket.select{|fruit| kind_List.include?(fruit.fruit_type) }    end
总结

以上是内存溢出为你收集整理的如何编写Ruby方法来处理零个,一个或多个输入?全部内容,希望文章能够帮你解决如何编写Ruby方法来处理零个,一个或多个输入?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1291533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存