ruby学习笔记(9)
1) ruby中self类似于js中的this,连它的指向的规则都类似。在js中最外层的顶层对象是window,在ruby中是main。
2) ruby中全局变量是通过$前辍来标明的。ruby解释器启动时,会初始化大量的全局变量,例如$0包含了ruby正在执行的文件的名字,$:包含了一些目录,$$包含了ruby进程的进程id。
3) 代码块也是ruby一个非常有特色的东西。在给函数传参之外,还可以选择性地传一个代码块给他。在函数内部使用yield关键字可以访问到代码块,并且可以给代码块传参。代码块还可以接自己的值再传回给函数。
====================================
def more_yielding(a)
puts "The Code block shall multiply a number by 10."
result = yield(a)
puts "The result of this operation is #{result}."
end
more_yielding(100){|x| x*10}
====================================
4) 字面构造器。和js一样,ruby中很多基本类型的数据也不需要通过new的方式构造,例如字符串,数组,你可以通过"abc",[1,2,3]就可以定义出来了,不需要通过String.new,Array.new(在js中是new String(),new Array())去定义。但ruby中这种类型的字面构造器比js中多:有String——"abc",Symbol——:symbol,Array——[1,2,3],Hash——{"name"=>"adang","sex"=>"male"},Range——0..9,Regexp——/[a-z]+/。和js相比,hash对象是有内置类的,另外还有Symbol和Range这两种特别的类型。
5) ruby中关于数据的运算不会像js那样自动的隐式转换,它像as3那样,对数据类型要求非常严谨,我们需要使用to_i,to_s之类的方法显式地对数据进行类型转换。
=======================
js: "hello" + 1 # hello1
ruby: "hello" + 1 # 异常
"hello" + 1.to_s # hello1
"hello".to_i + 1 # 1
=======================
6) 在ruby中访问一个对象具有的方法时,可以有以下几种方法可供调用:
.methods #所有对象本身的方法
.instance_methods #所有类实例会有的方法
.singleton_methods #为单个实例添加的方法
.private_methods #私有方法
.public_methods #公有方法
.protected_methods #保护方法
所有这些方法返回的都是最终的方法,包括继承而来的方法,如果不想包括祖先中定义的方法,可以给这些方法传false参数。例如:methods(false)。
7) ruby中比较字符串是否相等有两种方法,一种是通过==号,另一种是通过equal?方法。前者比较的是两者的值,后者比较的是两者的址。
================================
"a" == "a" #true
"a".equal?("a") #false
================================