ruby 如何允许方法和类同名?

2023-12-11

我碰巧正在用 ruby​​ 开发 Singleton 类,只记得它的工作方式工厂女工。他们解决了这个问题,所以你可以同时使用漫长的路 Factory.create(...) and 捷径 Factory(...)我想了想,很好奇他们是如何上课的Factory也表现得像一个方法。

他们只是简单地使用了Factory像这样两次:

def Factory (args)
  ...
end

class Factory
  ...
end

我的问题是:Ruby 是如何实现这一点的呢?使用这种看似古怪的模式有危险吗?


方法和变量位于不同的命名空间中。因此,您可以同时使用同名的方法和变量(或者在本例中为常量)。然而,在使用它们时,Ruby 需要能够区分它们。一般来说,这不是问题:消息有接收者,而变量没有。消息有参数,而变量没有。变量被分配,消息则没有。

唯一的问题是当你没有接收者、没有参数、也没有分配时。然后,Ruby 无法区分不带参数的无接收者消息发送和变量之间的区别。因此,它必须制定一些任意规则,这些规则基本上是:

  • 对于以小写字母开头的不明确标记,更愿意将其解释为消息发送,unless你肯定知道它是一个变量(即parser(不是(!)解释器)之前见过作业)
  • 对于以大写字母开头的不明确标记,更愿意将其解释为常量

请注意,对于带有参数的消息发送(即使参数列表为空),不存在歧义。

  • test():显然是一条消息发送,这里没有歧义
  • test:可能是发送的消息或变量;解析规则说这是一条消息发送(除非已分配给test before)
  • Test():显然是一条消息发送,这里没有歧义
  • self.Test: also显然是一条消息发送,这里没有歧义
  • Test:可能是发送的消息或常量;解析规则说它是一个常数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ruby 如何允许方法和类同名? 的相关文章

  • 从 ruby​​ 脚本运行另一个 ruby​​ 脚本

    在 ruby 中 是否可以指定使用与运行原始脚本相同的 ruby 解释器来调用另一个 ruby 脚本 例如 如果 a rb 运行 b rb 几次 是否可以替换 system ruby b rb foo bar 与类似的东西 run ruby
  • 在 (Mac)Vim 中查看 ri 时摆脱 ANSI 转义字符

    我在 gvim 和 MacVim 中查看 ri 文档时遇到问题 在两者上都尝试过 一些 ri 文档包含在终端窗口中查看时看起来不错的文本装饰 但在 gvim MacVim 中查看时包含 ANSI 转义字符 例如 以下 ri 片段来自 ri
  • 如何读取rack请求中的POST数据

    当我运行curl命令时 curl v H Content type application json X POST d name abc id 12 subject my subject http localhost 9292 要将包含数据
  • 为什么 Rails 中的 CSRF 令牌不会阻止多个选项卡正常工作?

    在阅读了 Rails 中 CSRF 保护的工作原理后 我尝试通过执行以下操作来触发 CSRF 保护 注意 我们使用基于 cookie 的会话 访问登录页面 检查元中的 CSRF 令牌 gt abc123 打开第二个浏览器选项卡 然后访问相同
  • Base36 编码字符串?

    我一直在网上查找 但找不到解决此问题的方法 在 Python Ruby 或 Java 中 如何对以下字符串进行 Base 36 编码 nOrG9Eh0uyeilM8Nnu5pTywj3935kW 5 Ruby 以 36 为基数 s unpa
  • 如何在 Ruby 中转义单引号?

    我通过一个脚本 不是我的 将一些 JSON 传递到服务器 该脚本接受 JSON 作为字符串 JSON 的某些内容包含单引号 因此我想确保在传递给脚本之前对所有单引号进行转义 我已经尝试过以下方法 gt irb gt 1 9 3p194 00
  • 与heroku配合使用的统计引擎

    我有一个 Heroku Rails 应用程序 需要处理一些重要的数字 并且我需要使用像 R 这样的统计库 更糟糕的是 MatLab 我正在寻找以下任何问题的答案 是否有不需要二进制文件的功能齐全的统计包 GEM 是否可以将 R 二进制文件作
  • Ruby openssl 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有 Ruby 的在线文档openssl图书馆 我能找到的只是博客文章和第三方文章 而 rdoc 本
  • 从使用heroku发送的邮件中删除“via sendgrid.me”

    我正在使用免费的 sendgrid 计划从 Heroku 上托管的 Rails 应用程序发送电子邮件 我使用以下组合进行设置这些说明 http devcenter heroku com articles sendgrid and 本教程 h
  • 为什么随机不那么随机?

    有人可以解释一下现代编程语言 java c python javascript 如何应对随机性的限制以及这些限制 例如基于时间的种子 的起源 即 如果它们是由底层操作系统和基于英特尔的硬件强加的 基本上我想了解为什么没有适当的硬件就没有真正
  • 在 Ruby 中转义字符串

    我想在某些 Ruby 中插入以下内容作为变量的值 lt gt 用双引号将其引起来是行不通的 那么是否有一个很好的 escape until the end 之类的东西可用 不要使用多种方法 保持简单 转义 反斜杠和双引号 irb main
  • Ruby on Rails,在服务器启动 2.3 上运行方法

    我想在 Rails 服务器启动时运行一个方法 这是一种模型方法 我尝试使用 config initializers myfile rb 但该方法是在迁移期间调用的 因此它是从不存在的表中选择的 也尝试过environment rb 但该类尚
  • 在Ruby中做每个,如何在每n个项目中放置一个br

    假设我有 10 个项目要迭代 我想每 3 个项目放置一个 br 就像这个例子一样 我怎样才能在 Ruby 中做到这一点 1 2 3 br 4 5 6 br 7 8 9 br 10 解决方案1 1 10 each slice 3 a puts
  • ruby on Rails“usr/bin/env:‘ruby2.3’:没有这样的文件或目录”

    我打字时遇到问题bundle exec rake db migrate在终端上 然后我收到了类似 usr bin env ruby2 3 No such file or directory 的结果 我遇到了同样的问题 但是运行时 rails
  • 从heroku 提取数据库失败并出现 Encoding::CompatibilityError

    我在执行 db pull 从 heroku 回到本地开发环境时遇到一些问题 我的设置是通过 RVM 在 Mac OS X Snow Leopard 下的本地 Rails 3 Ruby 1 9 2 环境上通过 MacPorts 安装 MySQ
  • Rails I18n 翻译范围

    编写完全翻译的应用程序可能会变得乏味 有没有办法为当前上下文设置默认翻译范围 示例 我正在部分内容中写入 deadlines html erb in the 显示 html erb我的行动ProjectsController 现在 因为我想
  • Rails API ActiveStorage:获取公共 URL 以显示来自 AWS S3 存储桶的图像?

    我设置了 Rails 5 2 API 并遵循了有关如何将图像附加到模型对象的文档 这一切都工作正常 我遇到的问题是我想在 JSON 对象中返回附件的公共 URL 以便我可以使用该 URL 作为源 img 并让它显示 谢谢 我的develop
  • Rails:自动加载库不起作用

    由于某种原因我的自动加载器无法工作 我遵循了一些教程 这是我的 config application rb 文件的样子 require File expand path boot FILE require rails all Bundler
  • Rails 路线、url 和子域

    我的 ruby 应用程序分为不同的命名空间 例如 免费 free domain com 专业版 pro domain com vip vip domain com 在路由文件中看起来像这样 namespace free do match h
  • Devise + CanCan 只是阻止其他用户编辑对象

    您如何防止其他用户编辑对象 例如不属于自己的配置文件对象 大多数在线示例都是具有多个用户角色的复杂示例 我无法使其正常工作 但必须很简单 def initialize user can update Profile do profile p

随机推荐