如何编写一个 ruby 方法,将关键字参数与散列结合起来?
How do I write a ruby method combining keyword arguments with hash?
我正在尝试设计一个像这样工作的 api:
client.entries(content_type: 'shirts', { some: 'query', other: 'more', limit: 5 })
所以我的 client
class:
中有这个方法
def entries(content_type:, query={})
puts query
end
但是我得到了syntax error, unexpected tIDENTIFIER
我也试过splatting:
def entries(content_type:, **query)
puts query
end
但我明白了
syntax error, unexpected ')', expecting =>...ry', other: 'more', limit: 5 })
在不切换参数顺序的情况下执行此操作的正确方法是什么。第二个参数必须是哈希,我不想使用 keyword argument
作为第二个参数
当前MRI和JRuby中的第二个作品:
def entries(content_type:, **query)
puts query
end
entries(content_type: 3, baz: 4)
# => {:baz=>4}
第一个不起作用,因为您不能既有关键字参数又自动将键值对收集到哈希参数中。
编辑以回应评论:
如果你想传递一个散列而不是将额外的关键字收集到一个散列中,那么你需要反转签名:
def entries(query={}, content_type:)
puts query
end
entries(content_type: 3)
# => {}
entries({ baz: 4 }, content_type: 3)
# => {:baz=>4}
或者,您可以展开您的哈希:
def entries(content_type:, **query)
puts query
end
entries(content_type: 3, **{baz: 4})
# => {:baz=>4}
或者,您可以将第二个参数也作为关键字:
def entries(content_type:, query: {})
puts query
end
entries(content_type: 3)
# => {}
entries(content_type: 3, query: {baz: 4})
# => {:baz=>4}
我正在尝试设计一个像这样工作的 api:
client.entries(content_type: 'shirts', { some: 'query', other: 'more', limit: 5 })
所以我的 client
class:
def entries(content_type:, query={})
puts query
end
但是我得到了syntax error, unexpected tIDENTIFIER
我也试过splatting:
def entries(content_type:, **query)
puts query
end
但我明白了
syntax error, unexpected ')', expecting =>...ry', other: 'more', limit: 5 })
在不切换参数顺序的情况下执行此操作的正确方法是什么。第二个参数必须是哈希,我不想使用 keyword argument
作为第二个参数
当前MRI和JRuby中的第二个作品:
def entries(content_type:, **query)
puts query
end
entries(content_type: 3, baz: 4)
# => {:baz=>4}
第一个不起作用,因为您不能既有关键字参数又自动将键值对收集到哈希参数中。
编辑以回应评论:
如果你想传递一个散列而不是将额外的关键字收集到一个散列中,那么你需要反转签名:
def entries(query={}, content_type:)
puts query
end
entries(content_type: 3)
# => {}
entries({ baz: 4 }, content_type: 3)
# => {:baz=>4}
或者,您可以展开您的哈希:
def entries(content_type:, **query)
puts query
end
entries(content_type: 3, **{baz: 4})
# => {:baz=>4}
或者,您可以将第二个参数也作为关键字:
def entries(content_type:, query: {})
puts query
end
entries(content_type: 3)
# => {}
entries(content_type: 3, query: {baz: 4})
# => {:baz=>4}