`

Ruby 代码块

 
阅读更多
引用
Ruby代码块可以通过yield方法传递给被调用的方法

1 测试类
require 'book'
require 'booklist'

booklist = BookList.new()
b1 = Book.new("iPod","123")
b2 = Book.new("How Objects Work","2")
booklist.add(b1)
booklist[1]=b2
print booklist[0].title, "\n"
print booklist[1].title, "\n" 

booklist.each{|book|
	print book.title, "\n"
}

booklist.print2{|x, y|
	print x,"\n"
	print y,"\n"
}

booklist.each_title{|title|
	print title,"\n"
}

author_regexp = /2/
booklist.each{|book|
	if author_regexp =~ book.author
		print "book.title: ",book.title, "\n"
	end
}

booklist.find_by_author(/2/){|book|
	print book.title, "\n"
} 

p booklist.find_by_author(/2/)



2 操作类
require 'book'

class BookList  
	def initialize()
		@booklist = Array.new()
	end
	
	def add(book)
		@booklist.push(book)
	end
	
	
	def length()
		@booklist.length()
	end
	
	
	def []=(n,book)
		@booklist[n] = book
	end
	
	
	def [](n)
		@booklist[n]
	end
	
	
	def delete(book)
		@booklist.delete(book)
	end
	
	def each
		@booklist.each{|book|
			yield(book)
		}
	end
	
	def print2
		yield(1,2)
	end
	
	def each_title
		@booklist.each{|book|
			yield(book.title)
		}
	end
	
	def find_by_author(author_regexp)
		if block_given?
			@booklist.each{|book|
				if author_regexp =~ book.author
					yield(book)
				end
			}
		else 
		    result = []
		    @booklist.each{|book|
		    	if author_regexp =~ book.author
		    		result << book
		    	end
		    }
		    return result
		end
	end
	
end 


3. 实体类
class Book
	attr_accessor :title, :author, :genredef 
	
	def initialize(title, author, genre=nil)
		@title  = title
		@author = author
		@genredef = genre
	end
end
 
分享到:
评论

相关推荐

    Ruby中的block代码块学习教程

    Ruby中的代码块(block)是语言的核心特性之一,它允许开发者定义可执行的代码段,并在需要的时候通过`yield`关键字调用。代码块通常由`{}`或`do...end`包围,它们不是独立的类,但可以转换为`Proc`类的对象。对于初学...

    详解Ruby中的代码块及其参数传递

    接下来我们将深入探讨Ruby代码块的声明、块内变量的访问、`yield`语句以及代码块的参数传递,以及通过`instance_eval`等其他方式传递块。 首先,**块的声明**有两种主要形式:使用`{}`或`do..end`。`{}`通常用于...

    详解Ruby中的代码块对象Proc

    在Ruby编程语言中,代码块(block)是一种非常重要的特性,它允许程序员定义一段可执行的代码,并在需要时调用。然而,由于代码块本身不是对象,...理解并熟练运用Proc对象,能够帮助提升Ruby代码的灵活性和可维护性。

    ruby源代码 ruby源代码 ruby源代码 ruby源代码5

    4. 块和闭包:Ruby中的块是一段可以被传递、存储和执行的代码,与闭包紧密相关,支持函数式编程风格。 5. 自动内存管理:Ruby采用垃圾回收机制,自动处理内存分配和释放,减少了内存泄漏的风险。 6. 标准库:Ruby...

    Ruby 代码规范

    本篇文章将深入探讨Ruby代码规范,帮助开发者养成良好的编码习惯。 1. **命名规范** - 变量名:使用小写字母和下划线,例如 `user_name`。 - 常量名:全大写字母,单词间用下划线分隔,如 `MAX_USERS`。 - 类名...

    Ruby on Rails入门经典代码

    - Blocks与Procs:Ruby中的代码块用于传递代码,Procs是可存储的代码块,Lambda更接近函数行为。 - Symbols:不可变对象,常用于方法参数、哈希键等,以提高效率。 - Mixins:Ruby的模块系统允许类间共享代码,...

    Ruby-Chef是一个系统集成框架为整个架构提供配置管理功能

    食谱则包含了如何配置这些节点的指令,是一系列用于实现特定功能的Ruby代码块。库房是食谱的集合,它通常包含相关配置文件和依赖关系,用于在整个环境中进行部署。资源是Chef的基本构建块,代表了要在系统上执行的...

    ruby源代码7

    4. **块(Block)与 Proc**:Ruby支持代码块,通常由`do..end`或花括号`{}`包裹。Proc是代码块的可存储版本,可以作为参数传递或赋值给变量。 5. **闭包(Closure)**:Ruby的块和Proc具有闭包特性,即它们能记住...

    Ruby-Flay分析代码结构的相似之处

    2. **相似性检测**:它会将代码分解成独立的“代码块”,然后比较这些代码块之间的结构和内容。 3. **分数计算**:根据代码块的相似程度,Flay会为每一对相似代码块分配一个分数。 4. **报告生成**:最后,Flay会...

    ruby实战书、代码书.rar

    5. **异常处理**:如何使用`begin-rescue-end`块进行错误处理是Ruby编程中的重要一环,书里可能会讲解异常类和如何捕获及处理错误。 6. **文件和IO操作**:Ruby提供了方便的文件和输入/输出操作,书里可能包含读写...

    Ruby-RubyCritic一个Ruby代码质量报告工具

    RubyCritic是一款强大的Ruby代码质量报告工具,专为Ruby开发者设计,用于提升代码质量和可维护性。这款工具通过对代码进行静态分析,生成详细的评分、建议和改进意见,帮助开发者识别并修复潜在的问题,从而实现代码...

    深入理解Ruby中的代码块block特性

    ### 深入理解Ruby中的代码块block特性 在Ruby编程语言中,代码块(block)是一种非常重要的概念,它不仅频繁地出现在各种程序中,还具有独特且强大的功能。本文将详细介绍Ruby中的代码块特性,包括其定义、用法以及...

    07Ruby 块.docx

    在Ruby中,BEGIN和END块分别用于定义当文件被加载时要执行的代码块以及程序退出时要执行的代码块。 ##### 5.1 BEGIN块 - **定义**: 在文件的任何位置都可以定义BEGIN块,但其代码会在文件加载时执行。 - **示例**:...

    为何Ruby 1.9的不兼容性会导致原有Ruby代码无法工作

    总的来说,Ruby 1.9 是一个重大更新,它的目标是提升Ruby的效率和表达能力,但这也意味着开发者必须适应新的规则,更新他们的代码库以保持兼容性。这一过程既是一个挑战,也是Ruby语言不断演进的证明。对于那些希望...

    Ruby元编程 源代码 Metaprogramming Ruby source code

    这个方法接受一个符号作为方法名和一个代码块,然后在指定的对象或类上创建一个新方法。 2. **类和模块的开放性**:Ruby的类和模块在运行时可以被修改,这意味着你可以在程序的任何时刻向它们添加新的方法或属性。`...

    Rails 中页面中常用函数

    ERB允许在HTML中嵌入Ruby代码,通过`&lt;% %&gt;`和`&lt;%= %&gt;`来区分纯Ruby代码块和输出表达式。前者执行代码但不输出,后者将Ruby表达式的结果输出到HTML。 2. **实例变量**: 在Rails的控制器中,我们通常会创建实例变量...

    daemons:Ruby守护程序gem官方存储库

    如果需要,还可以使用守护程序在守护进程中运行ruby代码块,并从主应用程序控制这些进程。 除了此基本功能之外,守护程序还提供了许多高级功能,例如异常回溯和日志记录(以防您的ruby脚本崩溃)以及监视和自动重启...

    swagger-blocks, 定义和服务 ruby 应用程序的动态更新 Swagger.zip

    swagger-blocks, 定义和服务 ruby 应用程序的动态更新 Swagger Swagger::Blocks Swagger::Blocks 是一个用于纯 ruby 代码块的DSL,可以转换为 JSON 。它帮助你以 Swagger 风格编写API文档,然后自动构建与 Swagger ...

Global site tag (gtag.js) - Google Analytics