不应该算是新学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 Variables
1. 定义一个类
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 Iterators
1. 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 987
class 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
分享到:
- 2009-03-11 09:19
- 浏览 917
- 评论(1)
- 论坛回复 / 浏览 (1 / 1563)
- 查看更多
相关推荐
Programming Ruby 2nd Edition
学习ruby的绝佳入门书籍,Programming Ruby 2nd.pdf
Programming Ruby - The Pragmatic Programmer's Guide, 2nd Edition (2005) [annotated]
NULL 博文链接:https://huihuilou.iteye.com/blog/1997808
Programming Ruby 2nd Edition
上传一系列RUBY的书,基本上网上能见到的全了
Programming Ruby中文版第二版[高清扫描版][带书签]。 Programming.Ruby-2nd[高清文字版][带
Pragmatic Programmers - Programming Ruby(2nd Edition Syngress).rar
内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm
Programming Ruby 2.0 1.9 pdf
Programming Ruby, Ruby程序设计
Programming Ruby 1.9 (3rd edition)和源码
Programming ruby.pdf 英文的,不过觉得读起来不吃力,习惯就好了,程序员如果不习惯读英文,会错过非常多的好书
Programming Ruby 第二版(Second Edition)英文版于2005年出版,之后有了中文版。但可惜的是网上流传的中文版PDF基本上都是扫描版的,文字内容得自己打出来,看到好的代码也得自己动手,无法Ctrl-C + Ctrl-V,还...
对于初学C的人,这本书是很好的教材,但也有需要记录的学习经验
Programming Ruby English version and the source Code
PROGRAMMING+RUBY中文版 PROGRAMMING+RUBY中文版 PROGRAMMING+RUBY中文版
Boost.Asio C++ Network Programming(2nd).pdf Boost.Asio C++ Network Programming(2nd).pdf Boost.Asio C++ Network Programming(2nd).pdf