hash.try(:[], :a)
# 1
Пытается вызвать открытый метод []
для hash
, передав в качестве аргумента :a
[]
. Поскольку :a
является существующим ключом в хэше, он возвращает его значение.
hash.try(:a)
# nil
Пытается вызвать публичный метод :a
для hash
. Как hash
, так как получатель не отвечает на :a
, тогда он возвращает nil
.
В качестве пояснения аргументы для try
являются в первую очередь методом, вызываемым на приемнике, а все остальные аргументы являются аргументами для вызываемого метода.
Если ваш хеш может ответить на метод :a
, hash.try(:a)
вернет значение этого метода, вызываемого hash
:
# Just for example purposes
class Hash; def a; :a_monkey_patched_value_for_a; end
hash.try(:a)
# :a_monkey_patched_value_for_a