我看到,在Ruby(以及通常的动态类型语言)中,一种非常常见的做法是传递哈希,而不是声明具体的方法参数.例如,与其用参数声明一个方法并像这样调用它,不如:

def my_method(width, height, show_border)
my_method(400, 50, false)

你可以这样做:

def my_method(options)
my_method({"width" => 400, "height" => 50, "show_border" => false})

我想知道你对这件事的看法.这是一种好的做法还是一种坏的做法,我们应该这样做还是不应该?在什么情况下使用这种做法是有效的,在什么情况下可能是危险的?

推荐答案

这两种方法都有各自的优点和缺点,当使用选项散列替换标准参数时,定义方法的代码会变得不清晰,但无论何时使用该方法,都会变得清晰,因为使用选项散列创建的伪命名参数.

我的一般规则是,如果一个方法有很多参数(超过3或4个),或者有很多可选参数,那么就使用选项散列,否则就使用标准参数.然而,当使用选项散列时,务必在方法定义中包含一条注释来描述可能的参数,这一点很重要.

Ruby相关问答推荐

扫描不带空格的字符串中的单词

多线程期间的 MRI ruby​​ 内存访问特性

Ruby 是否提供了一种使用指定编码执行 File.read() 的方法?

如何从 url 获取文件扩展名?

如何判断 Ruby 数组是否包含多个值之一?

Scala 的扩展性是否优于其他 JVM 语言?

出于调试目的,如何打印有关 NET:HTTPRequest 的信息?

你喜欢哪种风格的 Ruby 字符串引用?

就地修改 ruby​​ 哈希(rails strong params)

Ruby,生成随机十六进制 colored颜色

在 Ruby 中计算中位数

判断字符串是否为空的Ruby方法?

如何在 Ruby 的 IRB 中启用自动完成

从数组 Ruby 中删除元素

Capybara:按值而不是文本 Select 选项

Ruby 是否有像栈、队列、链表、映射或集合这样的容器?

当我们导入 csv 数据时,如何消除UTF-8 中的无效字节序列

检索/列出 Redis 数据库中的所有键/值对

如何在 Ruby 循环的第一次迭代中采取不同的行动?

什么是 Ruby 1.9 标准 CSV 库?