在Coffeescript中像Ruby一样访问Ruby中的哈希

时间:2014-11-24 09:43:40

标签: ruby hash coffeescript

最近我使用Backbone.js和Coffeescript开发了一些代码,并且习惯于使用内置方法的Coffeescripts来访问作为对象传递的内容:

{ firstname, lastname, @email } = options

相当于:

firstname = options.firstname
lastname = options.lastname
@email = options.email

问题

是否有任何内置的Ruby语法可以在Ruby的哈希上实现相同的行为?

到目前为止我能够实现的目标是:

firstname, lastname, @email = params.values_at(:firstname, :lastname, :email)

但它不是问题的1:1解决方案。

编辑#1

由Coffeescript生成的JS:

var firstname, lastname;

firstname = options.firstname, lastname = options.lastname, this.email = options.email;

1 个答案:

答案 0 :(得分:2)

Ruby没有任何内置解决方案;你的解决方案是正确的方法。

firstname, lastname, @email = params.values_at(:firstname, :lastname, :email)

如果您碰巧知道哈希是一个有序的哈希,并且只包含您想要的值,并且按照您想要的顺序,那么您可以获得如下所有的值:

# Suppose params = {
#    firstname: …, 
#    lastname: …,
#    email: ….
# }
firstname, lastname, @email = params.values

作为一般性提示,如果您碰巧知道哈希是一个有序哈希,并且包含的​​条目多于您想要的值,但值的顺序是您想要的,那么您可以获取所有值并跳过你不关心的。使用"无用的"根据需要多次将变量作为占位符,以跳过可忽略的值:

# Suppose params = {
#    firstname: …, 
#    middlename: …,
#    lastname: …,
#    bithdate: …,
#    email: …, 
#    whatever: …
# }
firstname, _, lastname, _, @email, _  = params.values