ruby基础知识点

第一次接触ruby还是16年7月,当时使用ruby写自动化测试脚本用了两三个月,之后就丢一边了。最近因为项目需要使用ruby,复习其语法特性(和python3.6对比学习),记录一些知识点。
参考资料《Ruby基础教程》

  1. ruby是完全面向对象的高级的解释型语言。(和python一样)
    常用的对象有:
  • 数值对象
  • 字符串对象
  • 数组
  • hash
  • 正则表达式对象(python里面是一个单独的re模块)
  • 时间对象
  • 文件对象
  • 符号对象
  1. 变量(各种变量由其命名区分,python不一样)
  • 局部变量
  • 实例对象(@开头)
  • 类对象(@@开头)
  • 全局变量($开头)
  1. ruby支持多重赋值
    a, b, c = 1, 2, 3
    a, b, c, d = 1, 2 #=> [1, 2, nil] 多了不管少了补nil
  2. 置换变量的值
    a, b = b, a # 置换变量a、 b 的值
  3. 获取数组元素
    用数组赋值, 左边有多个变量时, Ruby 会自动获取数组的元素进行多重赋值。
ary = [1, 2]
a, b = ary
p a #=> 1
p b #=> 2
  1. nil:ruby的null
  2. 条件语句
  • 语句的格式

有end这个结束符,缩进无所谓

if exp then  # then可以省略
处理 1
elsif 条件 2 then
处理 2
elsif 条件 3 then
处理 3
else
处理 4
end
  • unless
    和if的相反
  1. 逻辑运算符(和Java一致)
    与 && (python 是and)
    或 || (python是or)

  2. case语句(这个py没有,类似Java的switch)

when 值 1 then
处理 1
when 值 2 then
处理 2
when 值 3 then
处理 3
else
处理 4
end

※ 可以省略 then

  1. if 修饰符与 unless 修饰符
    if 与 unless 可以写在希望执行的代码的后面
puts "a 比b 大" if a > b

python也有类似语法,不过必须要有else:

print('yes') if a>b else print('no')

11.获取对象id

python使用内置方法id(obj)

使用内置属性 object_id(或者 id

  1. 相等判断
    使用对象方法equal?():
    p str1.equal?(str2)
    python直接用"=="

  2. 循环
    Ruby 中有两种实现循环的方法。

  • 循环语句
    自带的循环语句
  • 方法实现循环
    相当于自定义循环方法,但是是基于循环语句和yield

将块传给方法, 然后在块里面写上需要循环的处理。 一般我们在为了某种特定目的而需要定制循环结构时, 才使用方法来实现循环 .

六种循环语句或方法:

  • times 方法
  • while 语句
  • each 方法
  • for 语句
  • until 语句
  • loop 方法
    代码示例:
# times使用
# 执行七遍
7.times do
puts "aa"
end

循环次数 .times do
希望循环的处理
end
块的 do ~ end 部分可以用{~} 代替, 像下面这样:
循环次数 .times {
希望循环的处理
}
在
times 方法的块里, 也是可以获知当前的循环次数的。
10.times do |i|
  puts i
end

# for语句
sum=0
for i in 1..5
sum = sum + i
end
puts sum

# 1..5 是range对象 [1,5]这个区间,1...5则是[1,5)这个区间

for 变量 in 开始时的数值 ..结束时的数值 do
   处理
end
# 可以省略 do

普通的 for 语句如下所示:
for 变量 in 对象 do # 对象得是可迭代对象
  处理
end
# 可以省略 do

# while语句
while 条件 do  # 都可以省略
  处理
end
# util语句
和while反过来
until 条件 do
   处理
end


# each 方法
迭代可迭代对象的方法
对象 .each do | 变量 |
   处理
end
do ~end 可以改成{}结构

# loop语句
写死循环的语句
loop do
print "loop"
end

  1. 循环控制语句
  • break
  • next 类比continue
  • redo 把循环体的处理再来一次
  1. 方法
  • 方法的分类:
    • 实例方法 (对象.方法名)
    • 类方法 (类名 . 方法名,类名 :: 方法名 )
    • 函数式方法 (没有接受者的方法,如print)
  • 方法定义
def 方法名( 参数 1, 参数 2, …)
希望执行的处理
end

可以指定默认值给参数,只省略左边的参数或者中间的某个参数是不行的.这一点和python相同,python的关键字参数(也就是指定了默认值的参数)必须在后面.

  • 返回值
    如果没有写return语句,最后一个表达式的结果会被返回.又和python一样.

  • 定义带块的方法
    这是高级内容? yield的使用.

def myloop
    while true
        yield # 执行块
    end
end
# 使用:
# 块里面的语句会传给yield来执行
num = 1 # 初始化num
myloop do
    puts "num is #{num}" # 输出num
    break if num > 100 # num 超过 100 时跳出循环
    num *= 2 # num 乘2
end

  • 不定参方法

python是使用args来接收多个普通参数,*agrs来接收多个关键字参数.

ruby是:

# 哇哦 和python差不多啊
def foo(*args)
  args
end
p foo(1, 2, 3) #=> [1, 2, 3]   也是封装成list对象.

  • ruby的关键字参数
    python的字典{'a':1,'b':'222'}
    ruby的字典(hash):{'a'=>1},符号字典{a:1}
    python的关键字参数 def func(a=100)
    ruby的关键字参数def func(a:100)
    ruby也支持**agrs接收不定参的关键字参数,但是传入的时候是符号hash:
# ruby
def f1(a:100,**args)
    puts a
    puts args
end
f1(a:10,b:200)
相当于:
arg = {a:10,b:20} # 这是字面量,不是hash(字典对象),ruby的字典是{k=>V}这个形式的
f1(arg)
#结果
10
{:b=>200}

注意传入的参数形式,和python是不一样的,python的关键字参数,传入的是字典对象拆包:

# Python
def f1(a=1,**args):
    print(a)
    print(args)
args= {'a':10,'b':1}

f1(**args)
相当于f1(a=10,b=1)
# 结果:
10
{'b': 1}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270