为什么我们不能覆盖`||`和`&&`?

2023-11-25

大卫·A·布莱克他在书中指出:

[条件赋值运算符||=,以及它很少被发现的 表弟 &&=,两者都提供与伪操作符方法相同的快捷方式,但基于操作符,即|| and &&,您无法覆盖它。

为什么他特别提到我们不能覆盖|| and &&?


与对象上的其他一些运算符不同,对象的行为在逻辑上可以依赖于类,布尔运算符是语言的一部分。当你有一个像这样的运算符时,==,从逻辑上讲,该运算符的行为取决于对象的类型。字符串应逐个字符检查,哈希键值元组应逐个键值元组检查,等等。但是,&& and ||是基于语言的true 和 false 的定义,而不是任何特定于对象的东西。如果语言允许您覆盖这些运算符,则可能不存在一致的布尔模型,并且这些运算符将变得完全无用。

此外,还需要考虑性能。因为&& and || are 短路操作员,这意味着如果第一个参数,比如说,&&,评估为 false,第二个甚至从未被评估。和||,如果第一个计算结果为 true,则永远不会计算第二个计算结果。如果您可以重写这些运算符,则此行为将不可能发生,就像在 Ruby 中运算符被重载为方法一样。根据定义,在调用方法之前必须评估所有参数。因此,短路运算符的性能提升和编程便利性都会丧失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们不能覆盖`||`和`&&`? 的相关文章

  • Guard 不会加载 WDM

    我正在学习 Michael Hartl 的 Rails 教程 到目前为止该教程非常出色 我在高级设置一章中 他以有利于 TDD 的方式配置 Rails 环境 我安装了 Guard 并且通过运行我在 spec 文件夹中的测试 它一直正常运行
  • 使用 rbenv 在 MacOS 上安装 Ruby 2.6.0 失败

    我在 Mojave 上有一台 Mac 它无法安装开发所需的一些基本内容 rbenv install 2 6 0 Downloading openssl 1 1 1d tar gz gt https dqw8nmjcqpjn7 cloudfr
  • 被一个简单的正则表达式难住了

    我想看看字符串是否s包含正则表达式中的任何符号 下面的正则表达式可以正常工作rubular http rubular com s asd d s 但在 Ruby 1 9 2 中 它给出了以下错误消息 syntax error unexpec
  • 尝试使用适用于 Windows XP 的 Heroku 时未找到 msvcrt-ruby18.dll

    我有一个学生在 Windows XP 上进行开发 他在尝试运行时遇到了一个奇怪的错误heroku keys add 错误是 This application has failed to start because msvcrt ruby18
  • 如何用水豚填充日期时间本地字段?

    我正在使用 Cocoon 添加记录 ID 看起来像workshop instance sessions attributes 1477654140 start time 目前 我正在遍历 DOM 并获取动态生成的 ID 这很好用 这样我就可
  • 什么是“太聪明”的 Ruby 代码示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在与一些程序员朋友进行讨论 他们说他们看到 Ruby 程序员 尤其是 编写了很多 太聪明 的代码 所以我想知道那会是什么样子 我指
  • 验证 ActionCable 连接

    我发现了一个很棒的 ActionCable gem 它是 SPA 的一个很好的解决方案 我只想发送html css and js资产 所有其他连接将通过ActionCable 交换字符串或者整数并不难 但是如何通过ActionCable登录
  • gets、gets.chomp 和 gets.chomp 之间的区别!?

    这三者有什么区别 gets 它得到一行带有 n gets chomp 它得到一行 但删除 n 那是对的吗 关于什么gets chomp gets http www ruby doc org core 2 1 0 Kernel html me
  • 如何阻止与 RSpec 和 Capybara 的外部连接?

    在我的 Rails 项目中 我想编写非理想条件的测试 例如缺乏互联网连接或超时 例如 我正在使用 gem 来联系 API 并且希望确保在我的应用程序和外部 API 之间存在连接问题时能够正确处理错误 我已经可以通过用录像机制作固定装置并从
  • 可以覆盖/实现的 ruby​​ 运算符列表

    是否有可以覆盖的所有 ruby 运算符的列表 不是那些不能的 Here s Ruby 运算符表 http phrogz net programmingruby language html table 18 4 方法和可重载的有 Elemen
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • 如何从 Ruby 程序发送邮件?

    我想从 Ruby 应用程序发送电子邮件 核心语言中是否有调用来执行此操作 或者是否有我应该使用的库 最好的方法是什么 如果你不想使用行动邮递员 http wiki rubyonrails org rails pages ActionMail
  • 如何使用本地安装的gems执行Ruby程序?

    我已经使用安装了我的依赖项 bundle package 然后将它们传输到离线服务器并运行 gt bundle install local Using mime types 1 19 Using rest client 1 6 7 Usin
  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • 没有要加载的文件 - ffi_c (LoadError)

    这个问题困扰了我几天 每当我使用 bring to front 方法时 require rubygems require watir browser Watir Browser new browser bring to front 我收到此
  • Bundle 说 gem 丢失了 - 但事实并非如此?

    背景 我正在维护contentRuby On Rails 站点 但我确实没有 Rails 的经验 当尝试运行 Rails 服务器时 rails s我明白了 在任何来源中均找不到 activesupport 3 2 0 Run bundle
  • 用户未定义的方法 attr_accessible 错误

    我正在尝试创建某种登录 我创建了一个用户脚手架并将此代码放在我的 user rb 中 class User lt ActiveRecord Base attr accessible name password digest password
  • 在 Ruby 中创建一个空文件:相当于“touch”?

    创建一个的最佳方式是什么emptyRuby 中的文件 类似于 Unix 命令的东西 touch https en wikipedia org wiki Touch 28Unix 29 touch file txt FileUtils tou
  • ruby 正则表达式匹配模式的多次出现

    我正在寻找构建一个 ruby 正则表达式来匹配模式的多次出现并将它们返回到数组中 模式很简单 即 两个左括号 一个或多个字符 后跟两个右括号 这就是我所做的 str Some random text lead first name and

随机推荐

  • 如何在 CANalyzer 中播放 blf 文件

    我对使用 CANalyzer 有点陌生 从未使用过该产品中的日志记录功能 我收到了一个 BLF 文件来分析 但不确定如何使用它 有人能指出我正确的方向吗 谢谢 更具体一点 在标准工具栏中设置离线模式 单击配置选项卡 通常位于窗口底部 你会看
  • 更改 WinRT 中的 UI 文化

    是否可以动态更改 WinRT 中的 UI 文化 我发现了ApplicationLanguages PrimaryLanguageOverride en 但这仅在显示应用程序 UI 之前有效 而不是在显示之后 例如 我想通过设置更改 UI 语
  • 无法设置桌子高度[重复]

    这个问题在这里已经有答案了 我有一个简单的 html 表格 我无法设置该桌子的高度 我错过了什么吗 table border 1 height 10px tr td b Name b td tr tr td b Name b td tr t
  • 从 Julia 调用 Fortran 函数,返回数组:未知函数,段错误?

    我想从 Julia 调用 Fortran 库中的函数 在这种情况下 我有一个函数eye它接受一个 Integer 并返回一个二维整数数组 Fortran 模块被编译成共享库 使用 gfortran shared fPIC o matrix
  • 在 ubuntu 中导入 pyautogui 抛出 KEYERROR :DISPLAY

    Traceback most recent call last File 1 py line 1 in
  • 如何将值的数组参数输入到 Firebird 存储过程?

    我想输入一个数组参数ID 数为火鸟存储过程 INPUT LIST ID 1 2 12 45 75 45 我需要执行这个 SQL 命令 SELECT FROM CITY WHERE ID CITY IN INPUT LIST ID 是否可以
  • UIImage缩放后变得模糊。为什么?(iOS 5.0)

    UIImage缩放后总是变得模糊 如何才能保持清晰 UIImage rescaleImageToSize CGSize size CGRect rect CGRectMake 0 0 0 0 size width size height U
  • 从 ACF 相关图中提取置信区间值

    在 R 中 我们可以运行时间序列的 ACF 相关图 置信区间带将以浅蓝色绘制 但是当我拉取 ACF 对象的结构时 我找不到这些值 有谁知道如何提取置信区间带的值 e g List of 6 acf num 1 27 1 1 1 0 0645
  • 将 var 放入 jquery :gt()

    我有一个列表设置display none以及一些显示第 3 项的代码 HTML ul li item 1 li li item 2 li li item 3 li li item 4 li ul jquery var item 1 li g
  • 如何忽略 mod_rewrite 中的目录?

    我试图让 modrewrite 规则跳过该目录vip 我已经尝试了很多方法 如下所示 但没有成功 BEGIN WordPress
  • 将 VS Code Jupyter Notebook 中的输出折叠到可滚动窗口中

    有没有办法在 VS Code Jupyter Notebook 的可滚动窗口中显示输出 例如很长的数据帧 我知道按字母 o 可以折叠所有输出 但拥有可滚动窗口仍然更好 因为它允许您在引用其他窗口的同时检查输出 我也检查了这个link但无法让
  • 如何检查字符串中是否有特殊字符或者某个字符是否是GoLang中的特殊字符

    从输入读取字符串后 我需要检查其中是否有特殊字符 您可以使用 strings ContainsAny 来查看符文是否存在 package main import fmt strings func main fmt Println strin
  • numpy.genfromtxt 与 datetime.strptime 转换器

    我有与此类似的数据gist我正在尝试用 numpy 提取数据 我对 python 相当陌生 所以我尝试使用以下代码来做到这一点 import numpy as np from datetime import datetime convert
  • jQuery 追加如果不存在

    我想附加一个div仅当它尚不存在时 我正在尝试这样做 但它不起作用 method id on change function e if this find option selected data method column id 1 if
  • Java:静态类?

    我有一门充满实用功能的课程 实例化它的实例没有语义意义 但我仍然想调用它的方法 处理这个问题的最佳方法是什么 静态类 抽象的 标记为 Final 的类上的私有构造函数和静态方法
  • 为什么 ScheduledExecutorService 不根据需要生成线程?

    在我的应用程序中 我使用 ScheduledExecutorService 但仅生成一个线程来处理计划任务 这是因为 ScheduledExecutorService 不会生成线程来处理挂起的任务吗 下面是一个代码片段 它将仅输出 run
  • CUDA:为什么按位运算符有时比逻辑运算符更快?

    当我要从内核中榨取最后一点性能时 我通常会发现替换逻辑运算符 and with 按位运算符 and 使内核更快一些 这是通过查看 CUDA Visual Profiler 中的内核时间摘要观察到的 那么 为什么按位运算符faster比 CU
  • 如何更改shinydashboard中侧边栏的字体大小

    我是shinydashboard的新手 不熟悉CSS 谁能告诉我如何更改shinydashboard中侧边栏的字体大小 非常感谢 下面是我的代码 library shinydashboard library shiny ui lt dash
  • PHP 中的密码安全

    您认为哪种方法最安全 我从 php net 上取下了这些片段 我只是想知道 因为人们发布了自己的内容 而我只是无法理解为什么有些人是这样的 有人可以帮助我并告诉我更多关于这些的信息吗 哪个最安全 为什么 1 2
  • 为什么我们不能覆盖`||`和`&&`?

    大卫 A 布莱克他在书中指出 条件赋值运算符 以及它很少被发现的 表弟 两者都提供与伪操作符方法相同的快捷方式 但基于操作符 即 and 您无法覆盖它 为什么他特别提到我们不能覆盖 and 与对象上的其他一些运算符不同 对象的行为在逻辑上可