ruby - 使用哈希表作为函数输入

标签 ruby

我在一个小组工作,该小组正在为我们在 Ruby 中使用的工具编写一些 API。在编写 API 方法时,我的许多团队成员使用哈希表作为方法的唯一参数,而我编写的方法则指定了每个值。

例如,一个类 Apple 定义为:

class Apple
  @commonName
  @volume
  @color
end

我会用方法实例化这个类:

Apple.new( commonName, volume, color )

我的队友会写这样的方法:

Apple.new( {"commonName"=>commonName, "volume"=>volume, "color"=>color )

我不喜欢使用哈希表作为输入。对我来说,这似乎不必要地笨重并且不会增加代码的清晰度。虽然在这个例子中看起来没什么大不了的,但我们的一些方法有超过 10 个参数,并且通常会有哈希表嵌套在其他哈希表中。我还注意到,以这种方式使用哈希表在公共(public) API 中极为罕见(net/telnet 是我现在能想到的唯一异常(exception))。

问题:我可以向我的团队成员提出什么论据,让他们不要使用哈希表作为输入参数。代码的庞大并不能作为充分的理由(他们不怕写 200-400 个字符行)并且过多的内存/处理开销不会起作用,因为它不会成为我们工具使用方式的问题.

最佳答案

实际上,如果您的方法需要超过 10 个参数,您应该重新设计您的类,或者吃土并使用散列。对于任何采用 4 个以上参数的方法,在调用该方法时使用典型参数可能违反直觉,因为您必须正确记住顺序。

我认为最好的解决方案是简单地重新设计这些方法并使用类似构建器或流畅模式的东西。

关于ruby - 使用哈希表作为函数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1792715/

相关文章:

带前导零的 ruby​​ Date.month

ruby - 如何在某些类型的参数上使用 RSpec 正则表达式参数匹配

Mysql::Error: 不正确的字符串值: '\xE9ditos...' with rails

ruby - Process.spawn 中的 "wrong first argument"异常

ruby - 在 Rails 中为路由设置别名

Ruby:Hash.keys 和 Hash.values 方法返回的键/值的顺序是什么?

ruby 自动化多个正则表达式替换

ruby-on-rails - 将字段名称作为参数传递给自定义验证方法 Rails 4

ruby-on-rails - Rails - 如何将变量插入正则表达式 (Regex),例如 assert_match

ruby - 我如何从 ruby​​ 访问 gmail 收件箱?有什么api吗?