Ruby:在Hash中使用try的两种方法

时间:2019-04-16 00:21:32

标签: ruby-on-rails ruby

我想在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?

1 个答案:

答案 0 :(得分:4)

commands += Command.command("testAgainstFatJar") { state =>
    "set assembly / test := {}" ::
    "assembly" ::
    "set Test / fullClasspath := Attributed.blank((assembly / assemblyOutputPath).value) :: (Test / fullClasspath).value.toList" ::
    "test" :: state
}

尝试在show Test / fullClasspath上调用公共方法hash.try(:[], :a) # 1 作为参数[]传递给hash。由于:a是哈希中的现有键,因此它返回其值。

[]

尝试在:a上调用公共方法hash.try(:a) # nil 。就像:a一样,接收者不响应hash,那么它会返回hash

为澄清起见,:a的参数首先是要在接收方上调用的方法,其他所有参数都是要被调用的方法的参数。


如果您的哈希可以响应方法nil,则try将返回在:a上被调用的方法的值:

hash.try(:a)