浏览 1563 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-11
最后修改:2009-03-15
不应该算是新学Ruby吧,应该算是复习。Rails也用过一些,不过之前没有这样做过笔记。我曾经写过一个帖子,讨论关于Perl,Python和Ruby的,写得还比价客观。这里我只想表达一个观点,如果从语法和概念上说,我更喜欢Ruby。这不是我一个人的观点,至少我认识几个Python的小牛也认为Python的语法不是很好“玩”。譬如,那种缩进表示的Block,譬如你要用全局函数open,len。虽然我更prefer{}来表示一个block,不过坦白说Ruby用end我还是能接受的(我就纳闷了,明明一个end就很OK,为什么Delphi和Basic要用Begin和End呢?)。而那种File.new, -3.abs这样单纯的面向对象的语法更是让我着迷。当然了,我们要尽量的避免使用那种Perl的习惯,什么$_这种东西,能不用尽量别用。我本人认为Perl的脚本非常的难于维护^_^
言归正传吧,这本书我2006年8月份就看过了,之后我也用Ruby写过一些“私人”脚本,帮助我的日常工作和娱乐。基本上我觉得Ruby是一个很有趣的语言,我对它的喜好仅次于C++(虽然Java我也经常用)。这个Blog系列就用来记录我复习Programming Ruby 2nd的笔记吧。
C03 Classes, Objects and Variables1. 定义一个类 class Song attr_reader :name, :duration, :singer @@play = 0 def initialize(name, duration, singer) @name = name @duration = duration @singer = singer @play = 0 end def to_s() "[Song: #@name -- #@singer -- #@duration]" end def play() @play += 1 @@play += 1 puts("Play #{to_s} #@play -- #@@play") end end
@xxx表示@x是一个instance variable,@@yyy表示@@yyy是一个class variable。to_s就是Java的toString()方法。 attr_reader表示之后的variable会有get方法。
C04 Containers, Blocks, and Iterators1. Array
a = [ 3.14159, "pie", 99 ] a.class -> Array a.length -> 3 a[0] -> 3.14159 a[1] -> "pie" a[2] -> 99 a[3] -> nil b = Array.new b.class -> Array b.length -> 0 b[0] = "second" b[1] = "array" b -> ["second", "array"] a = [ 1, 3, 5, 7, 9 ] a[1] -> 9 a[2] -> 7 a[99] -> nil a = [ 1, 3, 5, 7, 9 ] a[1, 3] -> [3, 5, 7] a[3, 1] -> [7] a[3,2] -> [5, 7]a = [ 1, 3, 5, 7, 9 ] a[1..3] -> [3, 5, 7] a[1...3] -> [3, 5] a[3..3] -> [7] a[3..1] -> [5, 7, 9] 2. Hash
h = { 'dog' => 'canine', 'cat' => 'feline', 'donkey' => 'asinine' } h.length -> 3 h['dog'] -> "canine" h['cow'] = 'bovine' h[12] = 'dodecine' h['cat'] = 99 h -> {"cow"=>"bovine", "cat"=>99, 12=>"dodecine", "donkey"=>"asinine", "dog"=>"canine"}
3. Block
def fib_up_to(max) i1, i2 = 1, 1 # parallel assignment (i1 = 1 and i2 = 1) while i1 <= max yield i1 i1, i2 = i2, i1+i2 end end fib_up_to(1000) {|f| print f, " " } produces: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987class File def File.my_open(*args) result = file = File.new(*args) # If there's a block, pass in the file and close # the file when it returns if block_given? result = yield file file.close end return result end end 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-11
BASIC係初學者之電腦語言,有BEGIN有END比較好解。
Delphi承自Pascal,剛好Pascal亦原為敎學電腦語言,所以又有begin同end。 |
|
返回顶楼 | |