`
qzriso
  • 浏览: 243037 次
  • 性别: 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删除 查看此书详细信息请在美国亚马逊官网搜索此书

      scratch-blocks-develop.zip

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

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

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

      Building Blocks.dotx

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

      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 ...

      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 和流式数据分析...

      Blocks Programming Topics

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

      Microsoft.ApplicationBlocks.Data.dll

      Microsoft.ApplicationBlocks.Data.dll

      Built-In Building Blocks.dotx

      Built-In Building Blocks.dotx office2016 .

      code-blocks汉化包

      3. 找到Code::Blocks的安装目录:在你的计算机上找到Code::Blocks的安装位置,通常在“Program Files”或“Documents and Settings”目录下。 4. 复制汉化文件:将“locale”文件夹中的内容复制到Code::Blocks的...

    Global site tag (gtag.js) - Google Analytics