`
qzriso
  • 浏览: 246685 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

Blocks, Closures and Proc Objects

阅读更多

Ruby 的 block 是個不錯的設計. 一個 block 就是一些程式碼, 其 context 為正在動態執行的環境. 有點像是一般稱為 callback 機制, 但 block 方法精巧多了

 

  • 當你呼叫 method 時, 你可以給它一個 block. 下面 “each” 是 method, do ~ end 中間就是 block, |x|, x 就是傳給 block 的參數.
    
    books = ["Ruby", "Rails"]
    books.each do |b|
      puts b
    end
    
    
    
  • 那麼 method 裡如何執行 block? 利用 “yield”
    
    def three_times
      for i in 1..3 do 
        yield i
      end
    end
    
    #invoke
    three_times do |i|
      puts "#{i}, see you!" 
    end
    
    
    
  • 那要是你的 method 不論有沒有 block 都可以接受的話, 你就要用 block_given? 來測試
    
    class File
      def self.my_open(*args)
        result = f = File.new(*args)
        if block_given?
          result = yield f
          f.close
        end
    
        return result
      end
    end
    
    File.my_open("x.txt", "w") { |f|
      f.puts "Hello World!" 
    
    
    
  • 分享到:
    评论

    相关推荐

      Blocks-And-Items-Revolution:《我的世界》 mod

      Blocks-And-Items-Revolution 是一个针对《我的世界》的MOD(模组),它扩展了游戏的基本元素,带来了全新的方块和物品,极大地丰富了游戏体验。MOD的开发通常基于Java语言,因为《我的世界》的服务器和客户端都是用...

      Mastering Ruby Closures

      《精通Ruby闭包》是Benjamin Tan Wei Hao撰写的一本指导书,旨在帮助读者深入了解Ruby编程语言中的闭包概念,包括块(Blocks)、Proc对象以及lambda表达式。本书着重介绍这些Ruby闭包的具体用途和行为,通过示例和...

      Programming LEGO EV3 My Blocks Teaching Concepts and Preparing for FLL epub

      Programming LEGO EV3 My Blocks Teaching Concepts and Preparing for FLL Competition 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

      ExtendSim软件中使用脚本自动建模示例模型下载Scripting Blocks and Connections

      标题中的"ExtendSim软件中使用脚本自动建模示例模型下载Scripting Blocks and Connections"指的是一款名为ExtendSim的动态系统模拟软件。这款软件允许用户通过编程方式自动化建模过程,提高建模效率和准确性。...

      scratch-blocks-develop.zip

      而`scratch-blocks`是Scratch项目的核心部分,它提供了用于构建代码块的可视化界面。这些代码块通过拖放方式组合,使得编程变得简单易懂,特别适合初学者。 `scratch-blocks-develop.zip`是一个压缩包,包含了已经...

      Building Blocks.dotx

      Building Blocks.dotx为word2007的页码模板,亲测有效,安装方法百度下即可

      Building Blocks.dotx office 2007页码模板

      Building Blocks.dotx office 2007页码模板

      code blocks for Novice

      ### Code::Blocks:初学者的理想选择 #### 一、概览与重要性 Code::Blocks是一款功能强大且用户友好的开源集成开发环境(IDE),专为C和C++程序员设计,尤其是初学者。其跨平台特性使其在Windows、Linux和macOS上...

      Blocks apple

      11. **Block Objects and Callbacks**: Block对象在实现回调机制方面非常有用,它们不仅携带执行代码,而且还携带执行所需的任何数据,这使得它们成为处理异步操作的理想选择。 通过上述知识点,我们可以了解到...

      Iec 61499 Function Blocks for Embedded and DCS Design 学习笔记

      Valeriy Vyatkin - Iec 61499 Function Blocks for Embedded and Distributed Control Systems Design-Instrumentation Systems (2011) 学习笔记 IEC 61499 功能块设计 for 嵌入式或分布式控制系统

      [C++] C++ Code::Blocks 应用开发教程 (英文版)

      Develop advanced applications with Code::Blocks quickly and efficiently with this concise, hands-on guide Overview Successfully install and configure Code::Blocks for C++ development Perform rapid ...

      Word 2007 Building Blocks

      Word 2007 无法插入页码,请下载Building Blocks进行更新模板。具体更新模板方法可以查看此链接http://www.360doc.com/content/11/0102/10/3731941_83304659.shtml

      Code::Blocks

      Code::Blocks是一款强大的开源集成开发环境(IDE),它支持多种编程语言,包括Frotran、C++和Python等。在本文中,我们将深入探讨Code::Blocks的特性、用途以及如何利用它来编辑、修改和应用Frotran语言。 首先,让...

      code blocks汉化包

      Code::Blocks是一款开源的、跨平台的C++集成开发环境(IDE),因其简洁、高效而深受程序员喜爱。这款IDE以其可扩展性和高度自定义性著称,允许用户根据自己的需求调整工作环境。汉化包是为非英语国家的用户提供方便...

      藏经阁-Lego-Like Building Blocks of Storm and Spark Streaming Pipel

      藏经阁-Lego-Like Building Blocks of Storm and Spark Streaming Pipelines 在本文中,我们将探讨如何使用 Storm 和 Spark Streaming 构建 Lego-Like 的流式数据处理 pipeline,以便快速开发 IoT 和流式数据分析...

      Built-In Building Blocks.dotx

      Built-In Building Blocks.dotx office2016 .

      Blocks Programming Topics

      ##### Declaring and Creating Blocks 声明和创建块有两种主要方式:通过定义块引用变量或直接在函数调用中使用块。例如: ```c // 声明块引用变量 void (^myBlock)(void); // 创建块 myBlock = ^{ printf("Hello...

      Microsoft.ApplicationBlocks.Data.dll

      Microsoft.ApplicationBlocks.Data.dll

    Global site tag (gtag.js) - Google Analytics