ruby学习笔记四

 

ruby的模块

ruby用module...end定义模块。模块提供了一个名字空间,可以防止命名冲突。

    module Me
def foo()
return 0;
end
end

要使用me模块中的函数可以:

    include Me
foo()

如果连续inclde了多个模块,而这些模块中有同名的函数,那么前面的函数将被后面include的函数覆盖。

标准库里提供了很多模块,Math模块提供了大量数字相类的方法,比如Math.sqrt。前面使用模块都是用include模块名然后调用方法来 实现的,这个include有点像c++中的using namespace,有时候我们希望不include也能使用,就像Math.sqrt一样使用,因为这样可以防止include的多个模块中有重名的情 况。这时我们需要把函数定义为模块函数。

    module Me2
def Me2.foo()
end
end

下面我们不需要include Me2就可以用Me2.foo()来调用了。

外界不仅可以访问模块里的函数,还可以访问模块里的常量。常量的访问方式是module::常量名。

Mix-in

可以把一个模块中定义的函数整个放入到一个类里去。

    class Person
include Me
end

这样,Person类里就有foo()方法了,可以

    p = Person.new
p.foo()

与include方式对应,还有一个extend方法。include是为整个类加入这个模块的方法,extend可以为某个类的单个实例加入模块的方法。

    p1 = Person.new
p1.extend(Me2)

require和load

require类似于c++中的include,用来包括另一个文件,它们的区别在于:

require只加载一次,遇到同一文件时会忽略,不过不同路径下的同名文件会多次加载。

load会多次加载,只要运行到load语句就会加载一次。所以利用load的特性,可以实现系统的无缝升级,程序功能改变时只需要重新load一下就行了。

模块总结

require,load用于加载文件,include,extend用于包含模块。

require加载一次,load加载多次。

require加载文件时可以不加后缀,load必须加后缀。

require一般用于加载库文件,load一般用于加载配置文件。

数组

    arr1 = []
arr2 = Array.new
arr3 = [4, 5, 6]

ruby中的数组用整数作下标,下标从0开始,与c语言一致。可以使用负数下标,表示从末尾开始索引,如arr3[-1]表示最后一个元素,上例中是6。

可以用一对数字来索引数组,第一个数字表示开始位置,第二个数字表示数目,所以arr3[1..2]表示的是[4, 5]。

ruby中数组是动态的,随时可以添加/删除元素。

    arr3[6] = 45;                #把索引为6的元素设置为45,索引为3,4,5的元素都是nil
arr3.delete_at(3) #删除下标为3的元素
arr3.delete(5) #删除值为5的所有元素
arr3.insert(3, 66) #在下标为3的位置添加元素66
arr.pop #删除最后一个元素
arr.shift #删除第一个元素
arr.clear #清空数组
print arr.join(",") #把数组join成一个字符串输入,每个元素间用,分割

字符串

    str1 = 'str'
str2 = "str"
str3 = %q/str/
str4 = %Q(str)
str5 = <<OK_str
dksla;f
str
OK_str

%q用来生成单引号字符串,%Q生成双引号字符串,%q和%Q后面跟分隔符,可以是配对的! !; / /; < >; ( ); [ ]; { };等

str5是一个字符串文档,从<<后跟一个文档结束符,字符串从下一行开始,一直到遇到文档结束符为止,所以str5的实际内容是

        dksla;f
str

字符串中可以使用类似于c语言的转义符,比如"/n",也可以用#{}嵌入ruby表达式,表达式会被求值然后和字符串连接到一起。

正则表达式

迭代器,代码块,闭包

    (1..9).each{|i| print i if i < 7}

迭代器each是数组类的一个方法,{}中的代码是代码块,除了用{},还可以用do...end组织代码块。{}的优先级高于do...end。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值