Ruby 代码块

[quote]Ruby代码块可以通过yield方法传递给被调用的方法[/quote]
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值