我想知道是否应该验证传递给方法的参数是否属于某个类.
例如.
def type(hash = {}, array = [])
# validate before
raise "first argument needs to be a hash" unless hash.class == Hash
raise "second argument needs to be an array" unless array.class == Array
# actual code
end
Run Code Online (Sandbox Code Playgroud)
这样做是否聪明还是只是麻烦而且浪费时间来验证所有传递的参数?
在您不想打扰的情况下,您是否希望拥有这种额外的安全和环境?
分享您的经历!
我不推荐这种特定方法,因为您无法容纳提供散列或数组语义但不是该类的类.如果您需要这种验证,最好使用respond_to?方法名称.数组实现方法:[],它的价值.
OpenStruct具有哈希语义和属性访问器方法语义,但不会为条件返回true hash.class==Hash.不过,它在实践中就像哈希一样工作.
换句话说,即使是非动态语言,你也不希望这样做; 您更愿意验证对象是否实现IDictionary<T>.Ruby会在惯用时更喜欢在必要时验证方法是否存在,因为如果确实存在,开发人员可能会打算使用它们的对象.您可以通过围绕客户端代码的单元测试提供额外的健全性,作为强制事物非动态的替代方法.