是`respond_to_missing?’的第二个参数对任何事情都有用吗?

在Ruby中使用method_missing时,定义respond_to_missing? 几乎总是一个好主意 respond_to_missing? 同样。

respond_to_missing? 有两个论点; 我们正在检查的方法的名称( symbol ),以及一个布尔值,它指示我们是否应该在check( include_all )中包含私有方法。

现在这就是我所困惑的: method_missing不会接受任何可能指示它是否应该调用私有方法的参数,如respond_to_missing? 确实。 此外,无论原始方法调用是在公共或私有上下文中,并且无论respond_to_missing?是什么,都会调用method_missing respond_to_missing? 在适当的上下文中返回给定方法。 因此, method_missing所有操作都可以公开访问。

如果是这种情况,那么第二个参数对于respond_to_missing?目的是什么respond_to_missing?include_all )服务? 给定对象是否响应丢失的方法不会受到调用缺失方法的上下文的影响,那么为什么甚至会有这个参数呢?

我认为是respond_to_missing? 有一个第二个参数,原因与respond_to?相同respond_to? 确实。 在这两种情况下,它都允许代码以一种尊重方法隐私的方式向对象询问它响应的方法。 如果使用得当,它可以帮助您更好地封装您的对象。

您已经在method_missing指出了一个缺少的function,即它应该有一个参数,说明该方法是在公共或私有上下文中调用的。 也许method_missing有一天会有这个function。 在此之前,通过method_missing实现的对象的所有function都将实际公开,但您仍然可以阻止人们在您的文档中使用它并通过respond_to_missing?

method_missing不会接受任何可能指示它是否应该调用私有方法的参数

method_missing()不调用公共或私有方法。 当无法找到方法时,在方法查找路径的最后调用method_missing()。 所以比较method_missing()和respond_to *是非感性的。 为什么你认为他们必须以同样的方式运作? respond_to?()从来没有与method_missing()对称。