【PDF分享】Ruby on Rails 实践.pdf

红薯 发布于 2010/09/06 14:41
阅读 7K+
收藏 6

先看看开头的一段简介,此文写的算是简单明了,非常适合 Rails 入门。

下载 Ruby on Rails 实践.pdf

Ruby 简介:
在开始写这个教程之前,我原打算简单介绍一下 Rails 的使用就可以了,网上有相应的教程,只要照着翻译一遍就行。但是有两个原因促使我要先介绍一下 ruby: 一是:作为一个Ruby 语言的爱好者,我觉得有必要向大家介绍它的好处。它是学习 Rails 的关键所在。二是:不先学习一些 Ruby 的基本知识,Rails一些代码你就会不明白原委。
Ruby 是由日本人松本行弘发明的一种面向对象的脚本语言。虽然很多语言都宣称自己是面向对象的,但是每种语言的解释都不一样,大多是以它们自己特有的方式来解释什么是面向对象,而实际情况中,这些面向对象语言又都采用了很多非面向对象的做法。以 Java 为例:如果你想对一个数字取绝对值,你会怎么做呢? java 的做法是
int c = Math.abs(-166);
也就是将一个数值传递给 Math 类的一个静态函数 abs 处理。为什么这么做?因为在 java 中, 数值是基本类型不是类。
而在 Ruby 中,任何事物都是类, 也就是说,数字 –166 就是对象,取绝对值这样的操作应该属于数字本身,所以”Ruby 方式”的做法就是:
c = -166.abs
这种做法是不是更直观一点。
接着我们来介绍一下 ruby 语言的一些简单特点。
如何定义函数
def hello(name)
result = "hello, " + name
return result
end
这就是一个最简单的函数定义。Ruby 以 def 开始一个函数定义,后跟着函数名, 然后是 参数,但是参数不必非要放在括号中, 你可以这样定义 def hello name ,之所以要用括号是为了更清晰。在 ruby 中你可以用多种方式来完成同一件事情,这也是 ruby 的设计思想。
Hello 函数很简单, 将参数和 “hello, “字符串组合在一起,赋值给临时变量 result ,然后再返回 result。你会注意到 result 变量并没有申明,因为在 ruby 中无需申明,变量在赋值中自动使用。另外 ruby 中不需要使用 ; 来结束每个语言,只要保持每条语句在单独一行就可以。 Ruby 也不包含 {} 来定义块结构, if , when 函数都以一个 end 关键字来结束。缩进不是语法(python 程序员要失望了)。第一次使用ruby 我也有点不习惯,因为我认为python 语言的缩进语法可以使得阅读程序代码更容易一些。但是学习了一段时间后,我发现缩进语法并不是那么重要,Ruby 本身带来的帮助远比这个更重要。而且代码的易读性也不是由缩进来改善的.此外上面的代码还可以更简化。
def hello (name)
" hello, #{name}"
end
在 ruby 中,函数的最后一条语句如果是表达式,那么它就作为返回值。在上面的代码中,用到了另外一个概念,就是表达式插入,字符串可以用单引号和双引号来括起来。但是两者还是有一点区别。区别在于处理时间上的不同。如果使用单引号,那么处理的时间很短。如果使用双引号,那么你可以插入变量,表达式,还有就是转意字符的替换,最常见的是 \n,\t 等。以上面的代码为例字符串中插入了变量 name ,字符串中插入变量以 # 开始,变量放在{}中。但是特殊变量可以不用 {}. 那么什么是特殊变量呢。这个也是 ruby 特别的地方。在 Ruby 中,全局变量以 $开头,静态变量,也就是类变量以 @@ 开头,实例变量以 @ 开头。如果在字符串中引用实例变量,你可以这么写。
def hello
" hello, #@name"
end
关于变量和基本结构我们就简单介绍这些,下面我们要介绍一个重要的Ruby 概念。就是interator (迭代器)。这个概念遍布在很多 ruby 代码中,也是最常见的 ruby way 。正是因为 interator ,在 ruby 程序中,你很少会看到循环的使用。举个最简单的例子,如何打印从1 到 6 的结果。
在 java 等语言中,我们的实现方法是:
for(int i = 1; i<6;i++) {
System.out.println(i);
}
而在 ruby 中,一切皆为对象,数字本身就是对象(我们在前面已经介绍过了),数字本身有它自己的迭代器 times 。那么让我们看看它的实现。
6.times {|i| p i }
是不是很简单。
迭代器的概念很有趣,它是如何在 ruby 中实现的呢。每个函数可以不光带有参数,还可以在参数后面带一个代码块。代码块在ruby 中是以 {} 和 do end 来包围起来的。通常如果是单行使用 {} ,如果是多行这使用do end 。这并非强制,只是习惯性用法。
代码块和参数并不相同,它和函数的执行可以说是并行的,确切的说是接替进行。如果在函数内部如何在运行过程中碰到了 yield ,它就会将函数执行过程交给函数附带的代码块来执行,代码快执行完了,执行流程转到函数内部继续运行。似乎很难理解,以下面这段代码来理解可以会容易一些。
def callBlock
yield
yield
end
callBlock { puts "In the block" }
输出:
In the block
In the block
CallBlock 函数中只有两个 yield 语句,它在执行过程中将执行权交给函数附带的 block 运行,block 输出字符串 "In the block" ,这样最终结果就是输出两行 "In the block" 。在函数内部使用 yield 还可以带任意多参数。比如
yield a, b, c
这三个参数对应代码块中的三个参数 {|x,y,z| p x y z }
好了, Ruby 就介绍到这里。下面正式进入正题,介绍一下 Rails 的使用。

加载中
0
V
V

受益了

0
好友

这几天正在搭公司的redmine,正好可以学习以下RoR,谢谢你提供的文档。

0
m
microsheng
非常好的介绍,谢谢!
0
zj525happy
zj525happy
正在学习ror...
0
h
honglibin
很好的学习材料,学习分享~
返回顶部
顶部