最近我使用Backbone.js和Coffeescript开发了一些代码,并且非常习惯于Coffeescript内置方法来访问作为对象传递的内容:
{ 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;
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