开发ruby的工具<a href="https://atom.io">Atom</a> for mac
运行ruby程序在Atom中的话,安装package Script,然后重启Atom
然后再Command + I
运行.注意一定要重启.
1. Click on Packages --> Commmand Palette --> Select Toggle.
2. Type Install Packages and Themes.
3. Search for Script and then install it.
4. Press Command + I to run the code (on Mac)
创造者:松本行弘
Ruby 是"程序员的最佳朋友"。
方便程序员,性能没有Java好
是开源的,在 Web 上免费提供,但需要一个许可证。
通用的、解释的编程语言。
真正的面向对象编程语言。
可以用来编写通用网关接口(CGI)脚本。
可以被嵌入到超文本标记语言(HTML)。
可用于开发的 Internet 和 Intranet 应用程序。
可以安装在 Windows 和 POSIX 环境中。
可以很容易地连接到 DB2、MySQL、Oracle 和 Sybase。
1.编译/执行 Ruby 程序
puts "Hello World!";
2.Ruby 中文编码
puts "你好,世界!";
输出: invalid multibyte char (US-ASCII)
Ruby 使用用 ASCII 编码来读源码,中文会出现乱码
解决方法:
#!/usr/bin/ruby -w
# -- coding: UTF-8 -
- puts "你好,世界!";
3.Ruby的命令行选项
4.Ruby 语法
所有的 Ruby 文件扩展名都是 .rb
Ruby 程序中的空白
a + b 被解释为 a+b (这是一个局部变量)
a +b 被解释为 a(+b) (这是一个方法调用)
Ruby 程序中的行尾
Ruby 把分号和换行符解释为语句的结尾。但是,如果 Ruby 在行尾遇到运算符,比如 +
、-
或\
,它们表示一个语句的延续。
Ruby 标识符
标识符是变量、常量和方法的名称。Ruby
标识符是大小写敏感的。这意味着 Ram
和 RAM
在Ruby
中是两个不同的标识符。
保留字
略
Ruby 中的 Here Document
"Here Document" 是指建立多行字符串。
在 <<
之后,您可以指定一个字符串或标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。
print <<EOF 这是第一种方式创建here document 。
多行字符串。
EOF
print <<"EOF"; # 与上面相同
这是第二种方式创建here document 。
多行字符串。
EOF
print <<`EOC` # 执行命令
echo hi there
echo lo there
EOC
print <<"foo", <<"bar" # 您可以把它们进行堆叠
I said foo.
foo
I said bar.
bar
Ruby BEGIN语句
puts "这是主 Ruby 程序"
BEGIN {
puts "初始化 Ruby 程序"
}
// 先打印"初始化 Ruby 程序"
Ruby END语句
最后执行
Ruby 注释
单行注释:
#单行注释
多行注释:
=begin
多行注释
多行注释
=end
数据类型
Ruby
支持Number,String,Ranges,Symbols
数据类型,以及true
,false
和nil
这几个特殊值
Number数值类型
- 整形Integer
整形分为2种,31位以内Fixnum
超过为Bignum
- 浮点型
浮点数是Float类的对象.
算数操作
加减乘除指数: + - * / **
字符串类型
Ruby字符串简单地说是一个8
位字节的序列,它们是String
类的对象.
双引号标记的字符串允许替换和使用反斜线符号,单引号标记的字符串不允许替换,且只允许使用 \\
和 \'
两个反斜线符号.
转义符,\
Ruby表达式
#{expr}
i.e.
puts "相乘 : #{24*60*60}"
// 结果为: 相乘 : 86400
字符串可以相加:
name = "Liao Maer"
puts name + ", Loving"
// -> Liao Maer Loving
数组
数组字面量通过[]
中以逗号分隔定义,且支持range
定义.
- 数组通过
[]
索引访问 - 通过赋值操作插入,删除,替换元素
- 通过
+
,-
号进行合并和删除元素,且集合做为新集合出现 - 通过
<<
号向原数据追加元素 - 通过
*
号重复数组元素 - 通过
|
和&
符号做并集和交集操作(注意顺序)
i.e.
ary = ["fred", 10, 10.2, "this can be help", "last element"]
ary.each do |i|
puts i
end
哈希类型
哈希是在大括号内放置一系列键/值对,键和值之间使用逗号和序列=>
分隔。尾部的逗号会被忽略。
hashs = colors = {"red"=> 0xf00, "green"=>0x0f0, "blue"=>0x00f}
colors.each do |key, value|
print key, " is ", value, "\n"
end
范围类型
一个范围表示一个区间.
范围(1..3)表示 1,2,3
范围(1...3)表示1,2
(10..15).each do |n|
print n, ' '
end
类和对象
Ruby是一种完美的面向对象的编程语言.
- 数据封装
- 数据抽象
- 多态性
- 继承
定义类:
class Customer
end
使用关键字 end 终止一个类。类 中的所有数据成员都是介于类定义和 end 关键字之间.
Ruby类中的变量
- 局部变量
方法中定义的变量,局部变量在方法外是不可用的。局部变量以小写字母
或_
开始. - 实例变量
实例变量可以跨任何特定的实例或对象中的方法使用.实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@
). - 类变量
类变量可以跨不同的对象使用.类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@
)。 - 全局变量
类变量不能跨类使用.如果您想要有一个可以跨类使用的变量.您需要定义全局变量。全局变量总是以美元符号($
)开始.
i.e.
class Customer
@@no_of_customers=0
end
我们如果每次创建Customer的instance,可以让@@no_of_customers + 1
我们就可以统计有多少个Customer类的实例了
在Ruby中使用new方法创建对象
cust1 = Customer. new // .后面有没有space效果都一样
自定义方法来创建Ruby对象
略
Ruby类中的成员函数
在ruby中,函数被称之为方法.类中的每个方法以关键字def
开始,后面跟着方法名.
方法名总是以小写字符开头。在ruby中,可以用关键字end来结束一个方法.
class Sample
def hello
puts "hello, world"
end
end
sample = Sample.new
sample.hello
Ruby类案例
class Customer
@@no_of_customers=0
def initialize(id, name, addr)
@cust_id = id
@cust_name = name
@cust_addr = addr
end
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #{@cust_name}"
puts "Customer addr #{@cust_addr}"
end
def total_no_of_customeers()
@@no_of_customers += 1
puts "Total number of customers:#{@@no_of_customers}"
end
end
cust1 = Customer.new("1", "jack", "beijing")
puts cust1.display_details // 可以省略`()`,也可以加上,一样的,为了简单便捷,可以不加
Ruby变量
变量是持有可被任何程序使用的任何数据的存储文位置.
Ruby支持5中类型的变量.
- 一般以小写字符,下划线开头。变量
- $ 开头,全局变量
- @开头,实例变量
- @@开头,类变量,类变量被贡献刚在整个继承链中
- 大写字母开头:常数
Ruby全局变量
全局变量以$
开头。未初始化的全局变量的值为nil
。在是永久-w
选项后,会发生警告.
Ruby的实例变量
实例变量以@
开头
Ruby的类变量
类变量以@@
开头,并且必须初始化后才能在方法中使用.
引用一个没有初始化的类变量会发生错误.类变量在他的类或者模块的子类或者字母快中可以共享使用.
在使用-w
选项后,重载类变量会产生警告.
块
块由大量的代码组成。
需要给块取个名称。
块中的代码总是包含在大括号
{}
内。块总是从与其具有相同名称的函数调用。这意味着如果您的块名称为 test,那么您要使用函数 test 来调用这个块。
-
可以使用 yield 语句来调用块。
block_name{ statement1 statement2 .......... }
yield
ie1.
def test
puts "in test method"
yield
puts "you back to test method"
yield
end
test {puts "you are in block"}
result:
in test method
you are in block
you back to test method
you are in block
ie2.
def test1
yield (5)
puts "在 test 方法内"
yield (100)
end
test1{
|i| puts "you are in #{i} block"
}
result:
you are in 5 block
在 test 方法内
you are in 100 block
块和方法
通常使用 yield
语句从与其具有相同名称的方法调用块.
def test
yield
end
test{ puts "Hello world"}
如果方法的最后一个参数前带有 &
,那么您可以向该方法传递一个块,且这个块可被赋给最后一个参数。如果 *
和&
同时出现在参数列表中,&
应放在后面。
def test(&block)
block.call
end
test { puts "Hello World!"}
#输出: Hello World!
BEGIN 和 END 块
每个 Ruby
源文件可以声明当文件被加载时要运行的代码块(BEGIN
块),以及程序完成执行后要运行的代码块(END
块)
Ruby的模块
模块(Module
)是一种把方法、类和常量组合在一起的方式。
- 模块提供给了命名可敬避免名字冲突
- 模块实现了mixin装置
- 模块不能被实例化
- 模块没有子类
- 模块只能被另一个模块定义
实例:
module Trig
PI = 3.141592654
def Trig.sin(x)
# .. end
def Trig.cos(x)
# .. end
end
就像类方法,当您在模块中定义一个方法时,您可以指定在模块名称后跟着一个点号,点号后跟着方法名。
Ruby的require语句
require
语句类似于 C
和 C++
中的 include
语句以及Java
中的 import
语句。
使用 Ruby require 语句来加载模块文件
文件引用:
$LOAD_PATH << '.' # 让ruby知道必须在当前目录中搜索被引用的文件
require 'trig.rb'
require 'moral' # .rb 不是必须的
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)