Ruby编程语言_Chapter02_笔记

第二章 Ruby程序的结构和运行


  1. Ruby的注释以#开头,并持续到该行结束。Ruby没有/*...*/的C风格注释。

  2. 如果#出现在字符串或者正则表达式的字面量里,则它是字符串或者正则表达式的一部分,而不是注释。

  3. Ruby支持嵌入式注释,以=begin开头,以=end结尾。=begin和需要注释的内容之间至少要有一个空格作为分界符。=end也是如此,而且=end所在行,整行都是被注释掉的。=必须作为该行的第一个字符出现,前面连空格或制表符都不可以有。

  4. 文档化的注释

  5. 字面量 就是直接出现在Ruby源代码中的值,包括数字、字符串、正则表达式、数组、哈希值等。

  6. 标识符 即名字。Ruby用标识符对变量、类、方法等命名。
    1)可以有字母、数字、下划线组成,但不能以数字开头。
    2)以大写字母开头的标识符是常量。如果修改类似的标识符,会发出警告,但不是错误。
    3)类和模块名必须以大写开头,否则报错。
    4)非常量多字节标识符,以下划线分割,而不是java下通常的“驼峰命名”。

  7. Ruby是大小写敏感的。

  8. ASCII字符集下,Ruby规定了哪些字符是有效的,哪些是无效的。ASCII字符集之外的所有字符都是Ruby标识符的有效字符。比如UTF-8中的乘号“×”。

  9. 标识符里的标点符号
    1)$ 开头的变量是全局变量;
    2)@ 开头的变量是实例变量;
    3)@@ 开头的变量是类变量;
    4)? 返回布尔值的方法的名字通常以问号结尾;
    5)! 结尾的方法名,表明此方法会改变调用它的对象本身;
    6)= 如果方法名以=结尾,则调用此方法时,可以省略此等号,这种方法通常被置于赋值操作符的左侧。

  10. 保留字

    __LINE__caseensurenotthen
    __ENCODING__classfalseortrue
    __FILE__defforredoundef
    BEGINdefined?ifrescueunless
    ENDdoinretryuntil
    aliaselsemodulereturnwhen
    andelseifnextselfwhile
    beginendnilsuperyield
    break    
    =begin=end__END__  


  11. 如果__END__单独出现在一行(没有前置或后置空白),则标示程序结束,即数据区的开始。

  12. 可以通过在保留字前加上@、@@、$,从而当做实例变量、类变量、全局变量来使用。此外还可以将关键字作为方法名,但这种方法名不能单独出现在程序中,必须通过一个对象显示的来调用。

  13. Ruby的许多特性实际上是用Kernel、Module、Class和Object这几个类的方法来实现的。建议将以下标识符当做保留字来处理。
    1) 这些方法通常用于声明或者关键字

    at_exitcatchprivaterequire
    attrincludeprocthrow
    attr_accessorlambdaprotected 
    attr_readerloadpublic 
    attr_writerloopraise 


    2) 这些方法通常用于全局方法

    Arraychomp!gsub!select
    Floatchopiterator?sleep
    Integerchop!loadsplit
    Stringevalopensprintf
    URIexecpsrand
    abortexitprintsub
    autoloadexit!printfsub!
    autoload!failputcsyscall
    bindingforkputssystem
    block_given?formatrandtest
    callccgetcreadlinetrap
    callergetsreadlineswarn
    chompgsubscan 



    3)这些方法通常用于对象方法

    allocatefreezekind_of?superclass
    clonefrozen?methodtaint
    displayhashmethodstainted?
    dupidnewto_a
    enum_forinheritednil?to_enum
    eql?inspectobject_idto_s
    equal?instance_of?respond_to?untaint
    extendis_a?send 



  14. 空白符
    1)Ruby中可以使用分号来结束语句,但通常都被省略。如果省略,则换行符被视为语句的终结。
    2)如果语句分布在多行,则应注意换行符的位置。

    total = x + 
    y
      
    total = x
    + y

    3)以下情形不必担心换行符所引起的歧义。在操作符之后;在方法调用的句点之后;在数组或哈希表字面量里的分隔元素的逗号之后。
    4)可以在换行符之前加上“\”进行转义,避免终结语句。
    5)在Ruby1.9中,如果一行代码的第一个非空白字符是“.”,则该行被认为是上一行的延续。这种风格很符合链式调用。
    6)Ruby允许省略方法调用中的括号,但应注意方法名和参数之间的空格。
    f(3+2)+1	# equals to f(5) + 1
    f (3+2)+1	# equals to f(6)

    因此不要在方法名和左括号之间留白;如果参数是以圆括号开头,则整个方法调用一直要使用圆括号;最好一直使用Ruby解释器的-w选项。

  15. 块(block)是一段与迭代器相关的代码,以花括号或者do、end来分隔。(块的代码多于一行的时候,使用do、end来分隔)

    3.times {print "Ruby! "}
      
    3.times do |x|
        print x
    end

  16. 体(Body)是一个语句列表,如类定义体,方法体循环体等。体从不使用花括号分隔,而只使用关键字。

  17. 文件结构
    1)如果含有“shebang”注释,则该注释必须出现在文件首行;
    2)如果含有“coding”注释,则应该出现在“shebang”下面一行;如果没有“shebang”,则应出现在首行;
    3)如果文件包含一行代码,且该行代码只包含__END__标记,且标记前后均无空白符,则Ruby解释器将停止对该文件的处理。文件余下部分可以包含任何数据,而且程序可以通过IO流对象DATA对其进行读取。

  18. Ruby支持Unicode等其他字符集编码;1.8中需要-Ku选项,1.9中只需在文件开头加上以下注释(此注释必须用ASCII字符编写):

    # coding: utf-8

    1)coding后必须接一个冒号或等号,然后再接字符编码名称,该名称不能包含空格,也不能包含下划线和连字符以外的标点符号;
    2)冒号和等号两边可以存在空格,字符串coding前面还可以包含任意前缀;
    3)整个注释不区分大小写。

  19. 如果使用UTF-8,在Windows下最好保存的时候,选择无BOM方式。

  20. 在Windows的命令行中,要正确显示UTF-8输出,应该执行命令“chcp 65001”,并将字体改为“Lucida Console”。

  21. JRuby 1.6.x默认情况下是和Ruby1.8兼容的,如果想要和1.9兼容,需要设置系统变量“JRUBY_OPTS=--1.9”。

  22. 通常情况下(除非调用了exit!方法),Ruby会在退出之前执行所有的END语句,以及任何用at_exit函数注册过的“关闭钩子”代码。

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值