gpt4 book ai didi

ruby - Ruby中用 'send'调用 ':public'的意义

转载 作者:数据小太阳 更新时间:2023-10-29 07:31:47 26 4
gpt4 key购买 nike

在 Ruby 中,你可以做...

Object.send(:public, *Object.private_instance_methods)

...如 this answer to another question 中所示.这重新定义了 Object 的每个私有(private)实例方法,使它们成为公共(public)的。我的问题是:这是如何工作的? send 应该与方法名称一起使用,但似乎没有名为 publicprivate 的方法在 Object 上定义的 protected (或者至少我的搜索功能没有找到它们)。

> Object.respond_to?(:public)
=> false

最佳答案

确实有一个名为public 的方法,但它是在Module 上定义的.这没问题,因为 ObjectClass 的实例,而 Class 的父类(super class)是 Module:除了轻微的ruby 类层次结构中的循环引导这只是普通的 ruby​​ 继承。

您的 respond_to? 检查返回 false,因为默认情况下 respond_to? 不检查 protected 或私有(private)方法(在 ruby​​ 2.0 之前它会检查 protected 方法)。您可以通过执行请求搜索所有方法

Object.respond_to?(:public, true)

确实返回 true。

关于ruby - Ruby中用 'send'调用 ':public'的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com