【问题标题】:What is the // comparator in ruby? Does it existruby 中的 // 比较器是什么?是否存在
【发布时间】:2017-10-22 02:11:46
【问题描述】:

我是 Ruby 新手,使用 codecademy 开始学习。我正在讨论比较器/关系运算符的主题,并且已经给出了一个以// 作为比较器的示例。我在读什么codecademy问我错了吗?因为我在任何地方都找不到// 的含义,而且我不记得做过。

如果确实存在,请问这是什么意思?

【问题讨论】:

  • 如果你可以在这里复制粘贴这个例子,可能会更容易说出它的意思。
  • AFAIK 用于regex.grep(//),因为它比较其中的字符串,所以称为比较器
  • 非常感谢您的回答。我很困惑,因为实际上它不应该是我正在查看的示例中的比较器。谢谢。

标签: ruby comparison string-comparison comparison-operators


【解决方案1】:

comparator 是比较两个值的运算符,但 Ruby 中没有 // 运算符。

也许你把它和|| 混淆了?虽然这不是一个比较器,但它至少是一个运算符

顺便说一句,令牌// 确实存在于 Ruby 中。它只是不是一个运算符,而是一个正则表达式文字。它表示一个正则表达式,它匹配任何字符串。

【讨论】:

  • 非常感谢您的回答。我很困惑,因为实际上它不应该是我正在查看的示例中的比较器。谢谢。
【解决方案2】:

Ruby 中不存在// 运算符。它根本不是合法的语法:

1 // 2
# unterminated regexp meets end of file
# syntax error, unexpected tSTRING_END, expecting tSTRING_CONTENT or tREGEXP_END or tSTRING_DBEG or tSTRING_DVAR

如您所见,它被视为Regexp literal

它仅作为 Regexp 文字是合法的,例如:

// =~ 'foo'
'foo' =~ //
'foo'.split(//) #=> ['f', 'o', 'o']

String#chars方法被引入之前,后者实际上曾经是一个常见的习语。

但是作为运营商是不合法的。当然,您可以创建一个具有该名称的方法:

class Foo
  define_method(:'//') do |*args| p __callee__, args end
end

但是你只能使用反射发送相应的消息:

foo = Foo.new

foo.public_send(:'//', 1, 2, 3)
# :"//"
# [1, 2, 3]

不正常:

foo.//(1, 2, 3)
# syntax error, unexpected ',', expecting ')'
# foo.//(1, 2, 3)
#          ^

【讨论】:

  • 非常感谢您的回答。我很困惑,因为实际上它不应该是我正在查看的示例中的比较器。谢谢。
猜你喜欢
  • 2011-12-03
  • 2013-12-17
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
相关资源
最近更新 更多