逍遥安卓2.7.2下载:Ruby一些笔记
正则表达式:
在Ruby中,创建正则表达式的方式是 /pattern/。比如编写一个模式,使之匹配 “hello” 或者“Hi”的字符串。这个正则表达式的写法是
/hello|Hi/
在程序中要检查一个字符串是否与指定的正则表达式匹配,采用=~ 匹配运算符
if name=~/Ruby|Rails/puts "true"end
属性的访问性:
ruby并不支持直接访问类中的属性,如果要访问类中的属性,需要先通过attr_reader:属性名(只读),attr_writer:属性名(只写),attr_accessor:属性名(读写)来设定属性的访问权限。ruby在类里没办法定义变量,只能在方法中定义变量。方法和方法之间如果想通信只能通过@变量,也就是实例变量进行通信,ruby通过attr_xxxx可以控制@变量的访问性。
方法的访问性:
方法的访问性是通过public,private和protected进行限制的。public :方法名1,方法名2……这样的方式进行声明的。属性的访问性可以放在前面,但方法的访问性要放在方法之后,如果放在方法前面会出现方法未定义的报错。除了初始化方法恒化private,其它方法缺省为public
类方法(静态方法)。 ruby中定义类方法如下(即类名或self)
class HelloWorld def HelloWorld.hello(name) print name," said Hello." endendHelloWorld.hello("John")
class HelloWorld def self.hello(name) print name," said Hello." endendHelloWorld.hello("John")
需要注意的是,类方法不能访问实例变量
类变量(静态变量),ruby中类变量是通过加@@标识的
类常量:
类中还可以定义常量,还是要求大写字母开头。类中不能定义和方法平缓的变量,但是可以定义和方法平级的常量,常量可以被所有方法调用。类常量的调用方法是类名::常量名
模块:
模块是ruby特有的功能之一。模块和类很像,但和类最大的不同在于模块不能实例化,也不能继承,模块的作用有两个,一个是用于提供命名空间。第二提供Mix-in功能。
模块的常量和类常用调用方法一样。模块名::常量名。模块的方法调用和类的方法调用不同,可以使用模块::方法名,也可以使用模块.方法名
模块定义的方法默认是不对外部公开的,(模块内没有public private protect关键字),要将方法对模块外部公开,必须使用module_function
module HelloModule Version = "1.0" def hello(name) print "Hello, ",name,".\n" end module_function :hello #注意:冒号后不能有空格end p HelloModule::Version #=>"1.0"HelloModule::hello("Alice") #=> hello, Alice.include HelloModulep Version #=>"1.0"hello("Alice") #=>Hello, Alice
单引号和双引号的区别
单引号中不能包含变量,双引号中可以包含变量。在ruby中,单引号中的\n这样表示换行之类的转义字符都会无效,直接输出出来。
使用for
Ruby的for有两种用法
sum=0 for i in 2..5 sum+=1 end puts sum sum=0for i in 2..5 sum+=1endputs sum
names = ["a","b","c"] for name in names puts name end names = ["a","b","c"]for name in names puts nameend
注意hash输出结果,将键值都输出
name={"a"=>1,"b"=>2} for n in name puts n end name={"a"=>1,"b"=>2}for n in name puts nend
迭代,其实迭代也是我们熟悉的循环中的一种
1.a=["a","b"] a.each{ |n| puts n } a=["a","b"]a.each{ |n| puts n}
4: hash算列表 ,ruby的hash格式用=>分隔,在调用hash数据时,ruby只能通过hash[name]调用
b={"a"=>1,"b"=>2} puts b["a"]