最近我使用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解决方案。
由Coffeescript生成的JS:
var firstname, lastname;
firstname = options.firstname, lastname = options.lastname, this.email = options.email;
答案 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