ruby - `===` 是如何工作的?

标签 ruby switch-statement

<分区>

我查看了 Ruby on Rails 源代码,发现代码如下:

case options
when /\A([a-z][a-z\d\-+\.]*:|\/\/).*/i
  ...
when String
  ...
when :back
  ...
when Proc
  ...
end

其中 options 可以是 StringSymbolProcHash > 对象。 === 比较将仅在一种情况下返回 true:

'string' === /string/ # => false
:back === :back # => true
(Proc.new {}) === Proc # => nil
Hash.new === Hash # => false

Ruby case 是如何工作的,允许匹配这些不同的大小写?

最佳答案

您(以及许多初学者)似乎做出的错误假设是 === 是对称的。实际上不是。 x === y 的工作方式不同,不取决于 y,而是取决于 x

不同的类对===有不同的定义。表达式 x === y 与以下内容相同:

  • y == x(对于x:StringSymbolHash等)
  • y =~ x(对于x:Regexp的实例)
  • y.kind_of?(x)(对于 x:Class 的实例)

此外,您可能会混淆类及其实例。 /regexp/===Regexp === 不同。 "string"===String === 等不同

关于ruby - `===` 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34690876/

相关文章:

ruby - Heroku gem 不适用于 RVM

ruby-on-rails - 返回 rails 中的对象数组

ruby-on-rails - Rails 4 STI 继承

java - GUI 中的像素开/关(或黑/白)

c - 基于菜单的带有 while 和 switch 语句的程序?

ruby - 如何使用 bash cli(无 ruby​​)为 Travis CI 配置加密 API key ?

ruby-on-rails - Rails,重复代码重构

class - 带类的Clojure案例陈述

java - Switch 语句 请帮助我

php - 与 html 相比,使用 PHP 有什么缺点吗?