Minitest::Mock 和案例陈述

Minitest::Mock and case statements

知道为什么以下代码不起作用吗?

require 'minitest/mock'

test = Minitest::Mock.new
test.expect :class, Class

p case test
when Class
  'class'
else
  'nope'
end # => 'nope' … but should return 'class'

p test.class === Class # => true

Ruby case 处理 === 比较而不显式调用 class,尽管对 test.class 的结果进行显式比较使得上面的代码有效。

如果您不能这样做,正如您在上面所说的那样,您可能无法使 case 像这样工作。我的猜测是 Ruby 对 case 的实现是用 C 实现的,因此 class 可能永远不会被调用并且期望永远不会满足。