当前位置: 代码迷 >> Ruby/Rails >> ruby学习笔记1-基础懂得
  详细解决方案

ruby学习笔记1-基础懂得

热度:93   发布时间:2016-04-29 02:22:49.0
ruby学习笔记1---基础了解

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换行符