如何避免重复调用ruby哈希值的函数?

rn0zuynd  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(251)

pkg.A 到处都叫。我想知道我怎样才能避免这种情况?
另外,如何简化重复条件,如 pkg.A.B.nil?pkg.A.C.nil? ?
谢谢

packages = result.packages.collect do |pkg|

{
        :origin => pkg.A.nil? ? nil : {
          :version => ("#{pkg.name}.#{pkg.A.B.version}.#{pkg.A.B.desc}" unless pkg.A.B.nil?),
          :branch => (pkg.A.B.branch unless pkg.A.B.nil?),
          :id => (pkg.A.B.id unless pkg.A.B.nil?),
          :set => (pkg.A.C.set unless pkg.A.C.nil?),
          :event => (pkg.A.C.event unless pkg.A.C.nil?)
        }.compact
}
laawzig2

laawzig21#

您可以使用返回的安全导航操作符 nil 被召唤时 nil .
对于版本标识符,我将添加一个方法 pkg.A.B .

packages = result.packages.collect do |pkg| 
  next unless pkg.A

  { 
    origin: {
      version: pkg.A.B&.version_identifier,
      branch:  pkg.A.B&.branch,
      id:      pkg.A.B&.id,
      set:     pkg.A.C&.set,
      event:   pkg.A.C&.event
    }.compact
  }
 end

# new method on `pkg.A.B`

def version_identifier
  [name, version, desc].join('.') # assuming `name` is available though inheritence or delegation.
end

你也可以考虑拥有一个 origin_hash 方法论 pkg.A . 然后,整个方法可以简化为:

packages = result.packages.collect { |pkg| pkg.A&.origin_hash }

相关问题