Help us understand the problem. What is going on with this article?

m(&->(x,y){x}) が 0 で m(&->(x,y){x*y}) が 1 だと

Ruby の問題です。下記の記事の続編ですが,少し難しくなっています。
m{|x| x } が 0 で m{|x, y| x * y } が 1 だと? - Qiita

以下のテストをパスするメソッド m を定義せよ。

require "test/unit"

class T < Test::Unit::TestCase
  test "" do
    assert_equal 0, m(&->(x, y){ x })
    assert_equal 1, m(&->(x, y){ x * y })
  end
end

答えはここをめくってね

Ruby 2.7 以降:

def m
  yield 0, "".tap{ def _1.coerce(*); [1, 1]; end }
end

Ruby 2.6 まで:

def m
  yield 0, "".tap{ |o| def o.coerce(*); [1, 1]; end }
end

などとする。

scivola
主に Ruby 使ってます。 二十年来のコンパイラー恐怖症が Rust で治癒するか?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away