Ruby 是不是“回应”缺失了;第二个论点有用吗?

Ruby 是不是“回应”缺失了;第二个论点有用吗?,ruby,Ruby,在Ruby中使用时,还需要定义 接受两个论点;我们正在检查的方法的名称(symbol),以及一个布尔值,它指示我们是否应该在检查中包括私有方法(include\u all) 现在我感到困惑的是:它不接受任何可能指示它是否应该调用私有方法的参数,正如它所做的那样。此外,无论原始方法调用是在公共或私有上下文中,也不管给定方法在适当的上下文中返回什么,都会调用。因此,的所有操作都可以公开访问 如果是这样,那么第二个参数(include_all)的作用是什么?给定对象是否响应缺少的方法不能受调用缺少的方

在Ruby中使用时,还需要定义

接受两个论点;我们正在检查的方法的名称(
symbol
),以及一个布尔值,它指示我们是否应该在检查中包括私有方法(
include\u all

现在我感到困惑的是:它不接受任何可能指示它是否应该调用私有方法的参数,正如它所做的那样。此外,无论原始方法调用是在公共或私有上下文中,也不管给定方法在适当的上下文中返回什么,都会调用。因此,的所有操作都可以公开访问


如果是这样,那么第二个参数(
include_all
)的作用是什么?给定对象是否响应缺少的方法不能受调用缺少的方法的上下文的影响,那么为什么还要有这个参数呢?

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

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

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


方法_missing()不调用公共或私有方法。当找不到方法时,将在方法查找路径的最末端调用方法_missing()。所以比较方法_missing()和respond_to*是没有意义的。为什么你认为他们必须以同样的方式运作?首先,respond_to?()从未与方法_missing()对称。

Hmm。。。因此,您的意思是,即使目前没有办法将缺失的方法设置为私有,您也可以使用
respond\u to\u missing?
通过不宣传您可能希望私有的缺失方法的存在来部分模仿该行为?“method\u missing()不调用公共或私有方法”嗯,它可以。我的观点是MethodMissing可以用来模拟“方法”的存在,而这些“方法”实际上并不存在。这些“方法”必须是公共的,因为
method\u missing
不知道调用缺少的“方法”的公共/私有上下文。因此,既然所有缺少的“方法”都是公共的,为什么
response\u to\u missing?
有第二个参数,允许它根据我们是在寻找“private”还是“public”方法返回不同的值呢,我指的是不存在的方法,
method\u missing
正在模拟。