ruby学习笔记
?
1、命名约定
a. 局部变量、方法参数、方法名称 都必须以小写字母或下划线开始。
b. 类名称、模块名称和常量名称 都必须以大写字母开始。
c. 全局变量前缀$, 类变量前缀@@ , 实例变量前缀@
d. 从初始字符之后开始,名称可以是字母、数字、下划线的任意组合([email protected])
e. 方法名称可以?、!、=字符结束
惯例:
a. 包含多个单词的实例变量名称,词与词之间用下划线连接
b. 包含多个单词的类变量名称,使用混合大小写(每个单词首字母大写)
?
2、基本的一些知识
a. 打印输出 puts,print。puts自带换行 ?print不换行
b. 单引号(')和双引号("")表示的字符串不一样,双引号可以解析字符串里的变量及转义符(比如\n换行)
"hi,#{name}" ?引用局部变量name
"hi, [email protected]" 引用实例变量myname
"hi, #$user_name" 引用全局变量user_name
"hello,#{$user_name.capitalize}" 花括号可以直接引用局部变量,也可以用于复杂的表达式?
c. 全局变量是私有的,只能通过方法读写
d. 方法调用的括号可以省略
e. 方法的返回值可以不用return表达式,最后一个表达式的值也会作为方法的返回值
f. 单行注释以#开始(当然字符串里面的#就不是的)
?
ruby类示例:
class AA
$user_name = 'jason'
def say_hi
"hi, #$user_name"
end
end
调用示例 puts AA.new.say_hi
AA.new 表示创建(实例化)对象
?
f. 空的表示 ?nil是一个对象,表示空(即指没有任何东西)
?
3、数组与散列表
a. 数组 与 散列表都是存储对象的集合,都是通过键来访问,可以存储任何对象。
b. 数组的键是整数,而散列表可以用任何对象作为键。
c. 数组下标以0开始,散列表的键是唯一的(不能重复)
d.数组高效,散列表灵活。
数组:
arr = [1, 'cat',3.14] ?#一个含有三个不同对象元素数组
获取:
arr[0] ?—> ?1
arr[1] ?—> 'cat'
arr[2] ?—> 3.14
?
简单方法创建数组
arr = ["aaa","bbb","ccc"]
可以写为:
arr = %w(aaa bbb ccc)
?
散列表:
map = {}
map = Hash.new
map['name'] = 'zhangsan'
map2 = {
'name'=>'lisi',
'age'=>20
}
获取:
map2['name'] ? ——> ?'lisi'
map2['age'] ? ? ——> 20
?
4、控制结构
?
if ?条件
满足条件1语句
……
elsif 条件2
满足条件2语句
……
elsif 条件N
满足条件n语句…
else
其他...
end
?
?
while 条件
满足条件执行的语句内容...
end
?
5、语句修饰符
当控制结构的表达式只有一条语句,可以使用语句修饰符,更加方便
例如
if score > 60
puts "good"
end
可以写为 ?puts "good" if score > 60
?
square = 2
while square < 10000
square = square * square
end
可以写为
square = 2
square = square * square while square < 10000
?
6、使用正则表达式
/aa|bb/ 匹配aa或bb字符串
=~ 匹配操作符,可以用于正则表达式匹配。
如果在字符串中发现了模式,=~匹配操作符返回模式的开始位置,否则它返回nil
if line =~ /aa|bb/
puts "字符串中包含aa或bb"
end
?
line.sub(/aa/,"bb") ?#用bb替换第一个aa
line.gsub(/aa/,"bb") #用bb替换所有的aa
line.gsub(/aa|bb/, "cc") #用cc替换所有的aa或bb
?
7、BLOCK代码块
def test
puts "start"
yield
yield
puts "end"
end
调用
test { puts "hi, girls"}
输出:
start
hi,girls
hi,girls
end
?
a. 如果test方法有参数,可以写在代码块之前,比如test(参数){代码块}
b. yield调用执行传入的代码块,如果未传递则报错
c. 代码块有两种写法,一种是单行的{…},另外一种是do … end可以用于多行。约定俗成一般单行用花括号,多行用do...end
d. 代码块可以包含参数,用|参数1,参数2|表示,例如:
def test
yield("hello",99)
end
test {|str,num| … }
?
8、迭代器
['a','b','c'].each{|name| puts name," "}
5.times { print '*'}
2.upto(6) {|i| ?puts i}
('a'..'e').each(|char| puts char)
?
9.输入输出
输出函数:
a) puts
b) print
c) printf
puts 输出参数,并且每个参数后面都加一个换行符,而print不加。比如puts "a",”“
printf 相比print可以做格式化输出,比如printf("Number is %5.2f,\nString is %s", 1.354,'hello')将输出
Number is 1.35,
String is hello
?
输入函数:
gets
比如 ?
line = gets
puts line
?
gets函数会在末尾包含一个\n换行符