ruby-on-rails – 了解Ruby中的点击
发布时间:2020-12-17 01:20:40 所属栏目:百科 来源:网络整理
导读:我正在审查Rails项目中的一段代码,我遇到了tap方法.它有什么作用? 此外,如果有人可以帮助我理解其余代码的作用,那将是很棒的: def self.properties_container_to_object properties_container {}.tap do |obj| obj['vid'] = properties_container['vid'] i
我正在审查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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |