ruby
Ruby是服务器端脚本语言,是一个日本人在1993年创建的,Ruby是开源的、解释性的、面向对象的、语法简单的语言。
Ruby一般都是从命令行运行,所以命令行选项有:
- -a 与-n和-p一起使用时,可以打开自动拆分模式。
- -c 只检查语法,不执行程序。
- -C dir 在执行前改变目录
- -d 启动调试模式(等价于 -debug)
- -F pat 指定pat作为默认的分离模式
- -e prog 指定prog作为程序在命令中执行。可以指定多个-e选项,用来执行多个程序
- -h 显示命令行选项的一个概览
- -i 把文件内容重写为程序输出
- -I dir 添加dir作为加载库的目录
- -v 显示版本
- ....
所有的Ruby文件扩展名都是.rb,比如可以把下面的代码放在test.rb中:
#!/usr/bin/ruby -w puts "Hello, Ruby!";
希望运行这个ruby文件,只需要执行下面的命令:
ruby test.rb
Ruby中是大小写敏感的。
Ruby中的BEGIN和END语句使用如下所示:
#!/usr/bin/ruby puts "这是主 Ruby 程序" END { puts "停止 Ruby 程序" } BEGIN { puts "初始化 Ruby 程序" }
BEGIN中的语句会在程序的最开始运行,END中的语句会在程序的结束时运行;
Ruby中的注释符号为#,如下所示:
name = "foo" # 这是注释 #这也是注释 =begin 这是注释 这些都是注释 =end
Ruby数据类型有Number、String、Ranges、Symbols以及true/false/nil这几个特殊值,同时还有更重要的数据结构 -- Array和Hash。
Number数据类型中有整型(Integer)和浮点型(float),字符串类型就是'foo'类似的普通字符串类型,还支持一些反斜线符号,数组即 ['foo', 10, 3.14, 'this is a string']等,即可以是任意的类型,哈希类型就是 colors = { "red" => oxf00, "grenn" => 0x0f0, "blue" => 0x00f } ,由此可见,Ruby这门语言也是非常松散的,约束性不强,这样对于一些小项目发挥空间会更大一些;最后范围类型就是指一个区间,比如 (1...5)意味着包含值1,2,3,4,5。
Ruby是一种完美的面向对象的变成语言,面向对象编程语言的特性包括数据封装、数据抽象、多态性、继承等。以车辆为例,包括车轮、马力、燃油等数据成员,包括暂停、驾驶、超速等函数,所以,就可以定义Vehicle这个类如下所示:
Class Vehicle
{
Number no_of_wheels
Number horsepower
Characters type_of_tank
Number Capacity
Function speeding
{
}
Function driving
{
}
Function halting
{
}
}
通过给这些数据成员分配不同的值,就可以创建Vehicle的不同实例。
在Ruby中定义类如下:
class Customer end
即可以使用end终止一个类,类中所有数据成员都是介于类定义和end关键词之间。
Ruby中的变量有四种:
- 局部变量 - 就是在方法中定义的变量,在方法外不可用,局部变量以小写字母或者_开始。
- 实例变量 - 实例变量可以跨任何特定的实例。实例变量在变量名之前放置@符号。
- 类变量 - 即可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置@@符号。
- 全局变量 - 类变量不能跨类应用,如果希望可以跨类使用的变量,就可以定义全局变量,全局变量总是使用美元符号 $ 开始的。
Ruby中使用new方法创建对象,如下所示:
cust1 = Customer. new cust2 = Customer. new
Ruby中可以声明带参数的new方法,但是需要在类中声明方法 initialize,这是一种特殊类型的方法,将在调用带参数的类的new方法时执行,如下:
class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end end
在这里,id、name、addr作为局部变量的initialize方法,def和end用于定义Ruby方法initialize。这就可以创建类的对象实例了:
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala")