相关疑难解决方法(0)

在Ruby中=== vs. ==

在Ruby中,==和===之间有什么区别?该RDoc的

Case Equality - 对于Object类,实际上与调用#==相同,但通常由后代重写以在case语句中提供有意义的语义.

#==一样的==吗?你能举例说明在case语句中何时/如何使用它?

ruby

68
推荐指数
3
解决办法
2万
查看次数

检查整数是否在一个范围内

我不知道我是只是在寻找错误的东西或者是什么,但是有一种简单的方法来评估范围并使用(2..100)语法检查整数是否在该范围内.

例如,如果我的整数x = 100和我的范围是(0..200),我想要评估为真,我只是在寻找简单,简洁的红宝石方式.

ruby

51
推荐指数
4
解决办法
3万
查看次数

3 Equals或Case Equality运算符

在Ruby中Integer === 5返回true.同样String === "karthik"回报true.
但是,5 === Integer退货false.并且"karthik" === String.
为什么操作员不能交换?

ruby equality commutativity

21
推荐指数
2
解决办法
6237
查看次数

为什么self.class === MyClass返回false,而self.class == MyClass返回true?

我正在使用Ruby的case语法来设置一些基于self.class如下的简单逻辑:

case self.class
 when FirstClass
   do stuff....
 when SecondClass
   do other stuff...
 end
Run Code Online (Sandbox Code Playgroud)

我很快意识到这总是回归nil.经过仔细调查,我发现case使用===而不是==检查平等.当self.class == FirstClass我在我的终端中运行时,我得到true了预期,但self.class === FirstClass返回false.

展望红宝石文档,我发现了以下的解释===:

Case Equality - 对于Object类,实际上与调用#==相同,但通常由后代重写,以在case语句中提供有意义的语义.

谁可以在那里揭示可能发生的事情?提前致谢.

ruby

9
推荐指数
1
解决办法
163
查看次数

==和案例之间的区别?

我是Ruby的新手,我正在努力解决一些困扰我的问题.在编写一个简单的解析器时,我发现将char与a进行比较==会产生与将其与case表达式进行比较不同的结果:

File.open('Quote.txt') do |f|
  f.chars.each do |c|
    puts c == '"' ? 'Quote' : 'Err'

    puts case c
    when '"' then 'QuoteCase'
    else          'ErrCase'
    end

    p c == '"', c === '"', c
  end
end
Run Code Online (Sandbox Code Playgroud)

假设Quote.txt是一个包含单引号字符(0x22)的1字节文件,这会产生:

Quote
ErrCase
true
true
"\""
Run Code Online (Sandbox Code Playgroud)

我假设我做错了什么,但我无法弄清楚它是什么.有人可以帮忙吗?

顺便说一句,这是在Ruby 1.9.2中.

ruby parsing file

6
推荐指数
1
解决办法
163
查看次数

使用`===`(包含运算符)比较类

这事实上TypeOfClass === TypeOfClassfalse给我的印象是反直觉.在以下代码中,即使field.class是同一个类,它的计算结果为false:

case field.class
when Fixnum, Float
  field + other_field
when Date, DateTime, Time
  field
else
  puts 'WAT?'
end
Run Code Online (Sandbox Code Playgroud)

我这样做了:

Fixnum === Fixnum # => false
Class === Class   # => true
Run Code Online (Sandbox Code Playgroud)

我发现另一个线程:

Integer === 3 # => true
Fixnum === 3  # => true
3.class       # => Fixnum
Run Code Online (Sandbox Code Playgroud)

我找不到这种语言设计的原因.语言设计师在这种行为中思考的是什么?

我认为这与另一个帖子中提供的答案有关.假设Numeric === Integera Integer是一种更具体的类型,这并不是不自然的Numeric.但是,它不是:

Numeric === Integer #=> false
Run Code Online (Sandbox Code Playgroud)

我认为case陈述或 …

ruby types class switch-statement comparison-operators

1
推荐指数
1
解决办法
266
查看次数