ruby-on-rails – 了解Ruby中的点击

我正在审查Rails项目中的一段代码,我遇到了tap方法.它有什么作用?

此外,如果有人可以帮助我理解其余代码的作用,那将是很棒的:

def self.properties_container_to_object properties_container
  {}.tap do |obj|
  obj['vid'] = properties_container['vid'] if properties_container['vid']
  obj['canonical-vid'] = properties_container['canonical-vid'] if   properties_container['canonical-vid']
  properties_container['properties'].each_pair do |name,property_hash|
  obj[name] = property_hash['value']
  end
 end
end

谢谢!

解决方法

.tap在这里“对一系列方法中的中间结果执行操作”(引用ruby-doc).

换句话说,object.tap允许您操作对象并在块之后返回它:

{}.tap{ |hash| hash[:video] = 'Batmaaaaan' }
# => return the hash itself with the key/value video equal to 'Batmaaaaan'

所以你可以用.tap做这样的事情:

{}.tap{ |h| h[:video] = 'Batmaaan' }[:video]
# => returns "Batmaaan"

这相当于:

h = {}
h[:video] = 'Batmaaan'
return h[:video]

一个更好的例子:

user = User.new.tap{ |u| u.generate_dependent_stuff }
# user is equal to the User's instance,not equal to the result of `u.generate_dependent_stuff`

你的代码

def self.properties_container_to_object(properties_container)
  {}.tap do |obj|
    obj['vid'] = properties_container['vid'] if properties_container['vid']
    obj['canonical-vid'] = properties_container['canonical-vid'] if   properties_container['canonical-vid']
    properties_container['properties'].each_pair do |name,property_hash|
      obj[name] = property_hash['value']
    end
  end
end

返回填充.tap块的Hash beeing

您的代码的长版本将是:

def self.properties_container_to_object(properties_container)
  hash = {}

  hash['vid'] = properties_container['vid'] if properties_container['vid']
  hash['canonical-vid'] = properties_container['canonical-vid'] if   properties_container['canonical-vid']
  properties_container['properties'].each_pair do |name,property_hash|
    hash[name] = property_hash['value']
  end

  hash
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...