我很确定我在Rails相关网站上看到了以下内容:
def my_function(*opts)
opts.require_keys(:first, :second, :third)
end
如果未指定require_keys
中的某个键,或者如果没有指定键,则会引发异常。我一直在寻找ActiveSupport,我想我可能正在寻找类似于except的倒数的东西。
与编写自己的代码相比,我喜欢尝试使用尽可能多的框架,这就是我在知道如何自己创建相同功能时的原因。 :)
目前,我正在通过正常的merge
例行程序,并确保我拥有一些IF所需的内容。
答案 0 :(得分:2)
我认为您考虑的方法是assert_valid_keys
(documentation here)但是如果哈希中存在任何意外密钥,则只会引发异常,而不会丢失任何指定的密钥。即如果正在使用散列将选项传递给方法,则可以使用散列检查无效选项而不是所需选项。
答案 1 :(得分:1)
您可以相对轻松地自己完成此操作。正如之前的回答中所述,assert_valid_keys
中已完成一半的工作。您可以使用自己的方法来完成剩下的工作。
def my_function( *opts )
opts.require_and_assert_keys( :first, :second, :third )
end
使用以下内容创建lib/hash_extensions.rb
:
class Hash
def require_and_assert_keys( *required_keys )
assert_valid_keys( keys )
missing_keys = required_keys.inject(missing=[]) do |missing, key|
has_key?( key ) ? missing : missing.push( key )
end
raise( ArgumentError, "Missing key(s): #{missing_keys.join( ", ")}" ) unless missing_keys.empty?
end
end
最后,在config/environment.rb
中添加以使其正常工作:
require 'hash_extensions'