我想在Ruby中使用try
提取一个值。
我发现有两种方法可以做到这一点,并且在irb中对其进行了研究。
>> hash = { a: 1, b: 2 }
=> {:a=>1, :b=>2}
>> hash.try(:a)
=> nil
>> hash.try(:[], :a)
=> 1
我有两个问题,
hash.try(:[], :a)
和hash.try(:a)
有什么区别?我四处搜寻,发现人们同时使用这两种方式。答案 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)