1
class Object
  def all_equals(o)
    ops = [:==, :===, :eql?, :equal?]
    Hash[ops.map(&:to_s).zip(ops.map {|s| send(s, o) })]
  end
end

出力

"a".all_equals "a" # => {"=="=>true, "==="=>true, "eql?"=>true, "equal?"=>false}

誰かがコードを可能な限り深く壊して、そのような出力がどのように得られるかを確認することで私を助けることができますか?

いくつかの出力を与えるためにそれがどのように機能するかロジックを知りたかっただけです

ありがとう

4

1 に答える 1

3
self
# => "a"

o
# => "a"

ops.map(&:to_s)
# => [:==, :===, :eql?, :equal?].map(&:to_s)
# => ["==", "===", "eql?", "equal?"]

ops.map {|s| send(s, o) }
# => [:==, :===, :eql?, :equal?].map {|s| "a".send(s, "a") }
# => ["a".send(:==, "a"), "a".send(:===, "a"), "a".send(:eql?, "a"), "a".send(:equal?, "a")]
# => ["a" == "a", "a" === "a", "a".eql?("a"), "a".equal?("a")]
# => [true, true, true, false]

ops.map(&:to_s).zip(ops.map {|s| send(s, o) })
# => ["==", "===", "eql?", "equal?"].zip([true, true, true, false])
# => [["==", true], ["===", true], ["eql?", true], ["equal?", false]]

Hash[ops.map(&:to_s).zip(ops.map {|s| send(s, o) })]
# => Hash[[["==", true], ["===", true], ["eql?", true], ["equal?", false]]]
# => {"==" => true, "===" => true, "eql?" => true, "equal?" => false}
于 2013-01-12T21:12:37.707 に答える