Ruby:基本语法

下面,我要开始学习Ruby基本语法了,最近忙的只有晚上能学一会了。

感觉身体被掏空

变量

  • 局部变量:英文字母或_开头(注意关键字
  • 全局变量:$开头(不推荐
  • 实例变量:@开头
  • 类变量:@@开头
  • 伪变量:nil, true, false, self
  • 预定义变量

常量

大写字母开头(可以修改,但有警告)

多重赋值

  • 合并赋值
>> a,b,c=1,2,3
>> p [a,b,c]
[1, 2, 3]       # 挨个赋值
>> a,b,c=1,2
>> p [a,b,c]
[1, 2, nil]     # 缺少的用nil
>> a,b,c=1,2,3,4
>> p [a,b,c]
[1, 2, 3]       # 多余的丢弃
>> a,b,*c=1,2,3,4
>> p [a,b,c]
[1, 2, [3, 4]]  # 未分配的值封装为数组赋给*变量
>> a,*b,c=1,2,3,4
>> p [a,b,c]
[1, [2, 3], 4]  # 同上
>> 

置换变量:a,b = b,a(厉害了,word哥!)这个666,我之前都没见过这种用法啊

  • 多重赋值还有更多的用法(提取数组中的数据),这里就不赘述了

输出语句

  • print
  • puts:自动在每个字符串末尾加换行符
  • p:原样输出不进行转义
  • pp:以换行调整输出结果

通过程序来看一下:

➜  ~ irb --simple-prompt 
>> print "123\n","123"
123
123
=> nil
>> puts "123","123"
123
123
=> nil
>> p "123\n","123"
"123\n"
"123"
=> ["123\n", "123"]
>> 

可以看出上面的结论,同时也可以看出p方法与另外两个方法不同(注意返回值


# 我为什么要加横线呢,因为上边是我昨晚上写的

忍住

控制语句

  • 顺序控制
  • 条件控制

if - then - (elseif-then/else) - end(条件为真执行)
unless - then - (else) - end(条件为假执行)
case - (when - then)* - else - end(when可指定多个值,广义相等)

  • 循环控制

for [var] in [start]..[end] do - end(for [var] in [object] do - end)
while - do - end
until - do - end(条件为假时执行)
[number].times do |[var]| - end
[object].each do |[var]*| - end(([start]..[end]).each do |[var]| - end)
loop do - (break) - end

  • 异常控制

begin - rescue [Exception] => [ex var] - ensure - end(类比try-catch-finally
使用raise抛出异常
可以使用retry指定重新回到begin处重新执行(适当的sleep

若不定义[ex var],则:
$! 表示最后发生的异常对象
$@ 表示最后发生异常的位置信息(=$!.backtrace

说明

  • 广义相等===是指:相等、同=~匹配、右边对象属于左边类 .etc.
    when即是使用===判断,但when可以指定多个值
  • if/unless可以作为修饰:puts "a>b" if a>b
  • 循环控制:break/next/redo
  • do - end等同于{ - }:约定多行用前者,写于一行用后者
    10.times {|i| puts i}
  • 若整个方法体都被begin-end包括,可以省略(只写rescueensure

正则表达式

/pattern/ =~ "String"返回匹配索引位置或nil
/pattern/i表示不区分大小写

=> ["joshua", "lbq", "ben"]
>> names.each do |name|
?> if /b/ =~ name  # nil与false表示假,其余均为真
>> puts name
>> end
>> end
lbq
ben
=> ["joshua", "lbq", "ben"]
>> 

方法

  • 实例方法(最常用),例如to_s
    对象能够使用的实例方法是由所属的类决定的
  • 类方法,例如Array.new
    调用类方法,可以使用::替代.
  • 函数式方法:没有接受者,例如print

方法定义

def [function] (args=default...) - return - end
def [function] (arg 1: default 1, arg 2: default 2, ..., **undefined) - end(推荐

返回真假值的方法以?结尾
参数个数不确定,参数前加*
省略return则将最后一个表达式作为返回值(return表示返回nil)
带块方法:yield

补充:对于多个单词组合的变量名
使用 _ 隔开各个单词(变量名/方法名
单词以大写字母开头(类名/模块名

我看到的晚了,作业已经写完了[:cry]

库与引用库

require "lib"
# init ...
# call 

先到这里,我去写个作业去(感觉已经可以做了,let me see 一 see)


类的创建(类名首字母大写)

class - def initialize(args) - end(new方法调用) - (def [function])* - end
@[var]:实例变量
self变量

存取器

attr_reader
attr_writer
attr_accessor

attr_accessor: name等同于:

def name
  @name
end
def name=(value)
  @name = value
end

权限

public(函数默认为public,initialize除外)
private(initialize默认
protected

模块

模块创建(首字母大写)

module - module_function: [function]* - end


语法太多,请自行查看
推荐使用《Ruby基础教程(中文第四版)》

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

推荐阅读更多精彩内容