Я новичок в ruby и не знаю, как заставить test
вернуть 'true'
class Hash
def in(*)
end
end
# cannot alter below this line
def test
{ a: 1 }.in(:a) == 1
end
puts "test: #{test}"
Насколько я понимаю, в класс Hash
вставлен метод, но я не знаю, как получить «значение» переданного аргумента, если это имеет смысл. В любом случае, я довольно потерян. Спасибо за помощь.
Метод in в классе Hash не был определен для возврата чего-либо.
Вам нужно определить метод in в хеш-классе:
class Hash
def in(key)
self[key]
end
end
def test
{ a: 1 }.in(:a) == 1
end
puts "test: #{test}"
На самом деле вы бы решили это
{ a: 1 }.key?(:a)
. Как правило, избегайте повторного открытия (обезьяньего исправления) классов в ядре Ruby. Это позволяет избежать конфликтов между вашим кодом и кодом других людей, и есть много ловушек, поскольку эти классы фактически реализованы в C и не всегда ведут себя как настоящие классы Ruby. Есть лучшие способы учиться.