没有Rails Java程序员如何使用Ruby

http://tech.ddvip.com   2008年01月18日    社区交流

内容摘要:Ruby on Rails仅是使Ruby成为伟大的一个因素,这就象EJB仅是Java企业平台的一个组成部分一样。本文将带你一同讨论,作为一名Java开发者,仅利用Ruby自身所能够实现的功能。

  八、RubyBeans?

  你可能已经从列表3的两个加粗的类中注意到,Ruby支持使用速记符号来定义属性:它们是attr_reader和attr_writer。因为我使用了这种符号,所以我可以set和get在我的Word类中的相应的属性,见列表7:

  列表7.使用attr_reader和attr_writer

require "dictionary"
wrd = Dictionary::Word.new("turpitude", "Noun")
wrd.part_of_speech # "Noun"
wrd.spelling # "turpitude"
wrd.spelling = "bibulous"
wrd.spelling # "bibulous"
syns = [Dictionary::Word.new("absorptive", "Adjective"),
Dictionary::Word.new("imbibing", "Noun") ]
#危险!
wrd.synonyms = syns = syns #出现错误提示-"Exception: undefined method `synonyms='..."

  attr_reader和attr_writer都不是关键字,而实际上都是Ruby中的方法(可以在Module类中找到它们)-它们使用符号作参数。一个符号是以冒号(:)开头的任何变量,甚至在有些情况下,符号本身就是对象!

  注意,因为我在列表3中使synonyms成为只读的,所以Ruby否定了我在列表7中最后一行代码的尝试。

  另外,我可以使用attr_accessor方法编写属性声明代码以指出一个属性既可读也可写。

  九、迭代

  灵活的迭代是Ruby编程的快乐之一。请参考列表8,其中列出的是Word的initialize()方法的代码:

  列表8.Closures非常方便

def initialize(spelling, part_of_speech, definitions = [], synonyms = [])
@spelling = spelling
@part_of_speech = part_of_speech
definitions.each{ |idef| idef.word = self}
@definitions = definitions
@synonyms = synonyms
end 

  列表8中的第四行代码中出现了一些不同的东西。对于入门者来说,当我调用definitions实例上的每个方法时,我使用了大括号。每个方法实质上类似Java语言中的一个Iterator,但是它更简单。在列表8中,由每个方法处理迭代细节而只需调用者专注于期望的效果。在此例中,我传递了一个块,其意思是“for each value in the collection”,也就是idef,它是Definition的一个实例。

责编:豆豆技术应用

正在加载评论...