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基础教程(中文第四版)》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容