【问题标题】:Ruby: two ways using try in HashRuby:在 Hash 中使用 try 的两种方式
【发布时间】:2019-09-06 00:13:28
【问题描述】:

我想在 Ruby 中使用try 提取一个值。

我发现有两种方法可以做到这一点,并在 irb 中使用它。

>> hash = { a: 1, b: 2 }
=> {:a=>1, :b=>2}
>> hash.try(:a)
=> nil
>> hash.try(:[], :a)
=> 1

我有两个问题,

  1. hash.try(:[], :a)hash.try(:a) 有什么区别?我四处搜寻,发现人们同时使用这两种方式。
  2. 我看到很多地方使用 hash.try(:a) 来检索值,但为什么我的试用返回 nil?

【问题讨论】:

  • 你在哪里看到hash.try(:a)?如果hash 确实是一个散列,那没有多大意义。会不会是hash.dig(:a)
  • @EricDuminil hash.try(:a) 是我在 irb 控制台中输入的内容,看看我是否可以从中获得价值。

标签: ruby-on-rails ruby


【解决方案1】:
hash.try(:[], :a)
# 1

尝试在hash 上调用公共方法[],并将:a 作为参数传递给[]。由于:a 是哈希中的现有键,因此它返回其值。

hash.try(:a)
# nil

尝试在hash 上调用公共方法:a。如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

【讨论】:

  • 感谢您的明确回复。只是为了澄清我是否理解正确-try 将第一个传递的参数视为method,将第二个、第三个和后续参数视为first param 的输入参数?
  • 是的,就是这样。 如果调用,参数和块将被转发到方法
  • 谢谢,让我明白了很多!
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多