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

================================

原文地址:https://www.cnblogs.com/cly84920/p/4426877.html