开发者社区> 问答> 正文

关于 yield 的问题

有这么一段代码

def initialize(api_key, secret_key, options={})
  @api_key=api_key
  @secret_key=secret_key
  @oauth_request_option = @@default_oauth_request_options.merge(options)
  @oauth_access_option = @@default_oauth_access_options.merge(options)
  yield self if block_given?
  self
end

不太明白其中的

yield self if block_given?
self

是什么意思

展开
收起
心有灵_夕 2019-12-29 00:26:06 885 0
1 条回答
写回答
取消 提交回答
  • 当你需要这样调用方法的时候

    def foo
    end
    
    foo { "this is block param." }
    
    

    现实点的场景,比如你需要给 Views 定一个 space_less Helper 方法,清除区域内的 HTML 的空白字符,使得调用起来可以这样:

    <%= spaceless do %>
    <html>
    <body>
      <head></head>
    </body>
    <% end %>
    
    

    这个时候,你就需要用 yield 来定义一个可以接收 block 作为参数的方法了

    module ApplicationHelper
      def splace_less
         body = yield
         body.gsub!(/\s+/,'')
         body
      end
    end
    
    2019-12-29 00:26:32
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载