`

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中的代码块对象Proc

    在Ruby中一个代码块block不是对象,但可以用Proc来替代其作为对象进行操作,接下来我们就来详解Ruby中的代码块对象Proc

    Ruby中的block代码块学习教程

    在Ruby中,block并不是类,block可以被转化为Proc类中衍生出的对象,刚接触Ruby的话block是很难理解的一个点,接下来就为大家来总结Ruby中的block代码块学习教程

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

    block代码块基本上是开始学习Ruby后的第一个坎,接下来就带大家详解Ruby中的代码块及其参数传递,需要的朋友可以参考下

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

    听到代码块这个翻译,你或许会联想到类或者结构体,但block并不是这些东西,这里就带着大家来深入理解Ruby中的代码块block特性

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

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

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

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

    07Ruby 块.docx

    Ruby具有强大的元编程能力,允许开发者在运行时动态修改和生成代码。Ruby还有一个强大的标准库,提供了丰富的工具和功能,使开发者能够快速构建各种类型的应用程序。Ruby还有一个流行的Web框架Ruby on Rails,被广泛...

    深入理解Ruby中的block概念

    主要介绍了深入理解Ruby中的block概念,文中给出了Javascript代码块与Ruby代码块的对比,需要的朋友可以参考下

    Ruby编程语言

     5.4代码块140  5.5改变控制流146  5.6异常和异常处理154  5.7BEGIN和END165  5.8线程、纤程和连续体166  第6章方法、PROC、LAMBDA和闭包175  6.1定义简单方法177  6.2方法名180  6.3方法和圆括号183  6.4...

    ruby语法基础教程

    第五章 代码块和迭代器 38 §5.1 代码块(Block) 38 §5.1.1 什么是代码块 38 §5.1.2 代码块与对象 39 §5.2 迭代器(Iterator) 40 §5.2.1 什么是迭代器 40 §5.2.2 使用迭代器 40 §5.2.3 yield 41 §5.2.4 编写...

    《Ruby on Rails Web开发学习实录》

    全书共分17章,主要内容包括:搭建ruby on rails开发平台、ruby语言的基础知识(像控制语句、面向对象、数组和块等)、文件处理、数据库持久化、rails控制器和路由、视图模板以及发送邮件和ajax等。 《ruby on rails ...

    ruby——块

    类似地,Ruby 有一个块的概念。 1.块由大量的代码组成。 2.您需要给块取个名称。 3.块中的代码总是包含在大括号 {} 内。 4.块总是从与其具有相同名称的函数调用。这意味着如果您的块名称为 test,那么您要使用函数 ...

    vim-ruby-heredoc-syntax:vim插件,用于在ruby here文档中高亮显示代码

    vim-ruby-heredoc语法这样可以在Ruby此处的文档代码块中突出显示语法。安装使用neobundle.vim: NeoBundle ' joker1007/vim-ruby-heredoc-syntax '对于neosnippet和context_filetype 如果您有context_filetype.vim...

    laser:Ruby代码的静态分析和样式分析

    它将能够发现Ruby仅在运行时遇到的错误,并且能够发现与代码有关的属性,而这些属性是以前不存在的工具所不能提供的,例如给定的代码块是否引发,哪些方法是私有的(如果有方法的话)调用可能需要阻止,依此类推。...

Global site tag (gtag.js) - Google Analytics