Ruby学习札记(2)
Ruby学习笔记(2)ruby的for语句类似其他语言的for each语句。另外还可以使用迭代语法作循环处理,例如 (1..10
Ruby学习笔记(2)
ruby的for语句类似其他语言的for each语句。另外还可以使用迭代语法作循环处理,例如 (1..10).each do |i| puts i end 。迭代对象的body 被称作 block,在||中间的变量被称作 block parameters 。do ... end 的替代 写法是 { ... }。例如,?(1..10).each { |i| puts i end }。注意:分隔符必须与each方法在同一行。while语句。while condition do somethings end 或者 begin somethings end while condition 或者 something while condition 。后者的something至少被执行一次,前者可能一次都不执行。until语句。相当于 while not ,意思是直到出现指定的情况,循环语句才结束。loop语句。不判断条件永久循环,除非在循环体中调用break。分隔符可以是 {}, 也可以是do ... end。关键字yield用于运行传入函数中的代码块。if语句中的then关键词用于分隔条件判断和代码。如果代码和条件判断不在同一行,则then可以省略。分号可以用来替代then关键字。布尔运算符有英文和符号两种。个人理解是,英文运算符按照次序执行,没有优先级;符号则有。if ... elsif ... end。else if 在ruby中缩写为elsif。=== 根据不同的类型,会有不同的重载。对range类型来说 === 用于判断 range是否包含输入参数,等价于include?方法。例如, (1..2) === 1 得到 true的结果。不能反过来写,1 === (1..2),意思和前者完全不同。unless语句。相当于 if not。意思是条件不成立,才执行代码块。如同while,if和unless也有modifier的形式,即something if condition。ruby的常量列表可以用Object.constants获取。不同于其他语言,ruby的常量是可以重新赋值的,解释器只会给予警告。case语句。类似于C语言中的switch。完整的形式如下: case [variable, expression] when condition then ... else ... end 。condition可以是用逗号分开的多个值,并且值的类型可以不同。另外也不需要有break关键词,ruby仅执行匹配的代码块。catch 和 throw。不是异常处理的语句,而是类似于goto的语句。catch配合symbol用来定义代码块,throw用来跳转到指定的代码块。例子:catch(:location) { ... } ?throw :location类的方法。类的方法仅属于类自身,不能被类的实例调用,同时类也不能调用实例的方法。定义类的方法时,在方法名称前加上类名和一个点。例子:class SomeClass def SomeClass.somemethod ... end end。类的变量使用两个@符合起始,并且在第一次声明时就必须初始化。类也是对象,所以类也有自己的实例变量。singleton method。一种属于某个实例的独有方法。定义方法时,以实例名加点开头,并且可以在class外部定义。实例的singleton_methods方法可以返回实例的所有singleton方法列表。如何判断一个实例是否含有某个方法。使用实例的respond_to?方法,传入的测试方法名用symbol来表示。例子:item.respond_to?(:method_name)singleton class。类似于singleton method,也可以为某个实例增加独有的方法。而且一次可以加多个方法。写法的形式上是class << instance def method_name ... end end。可以说,和singleton method相比singleton class和它没有多大的差异。两者是以不同的形式做相同的事情 -给指定实例增加独有的方法,以避免再定义新的类型。在ruby中,类的实例方法有可见性:public protected private,其中protected比较特殊。protected方法不能在类的外部被实例直接调用,但是可以类的内部被同类型的其他实例调用。也就是说,类的实例方法的可见性是基于scope的。ruby的语法都是面向表达式的。例如,if语句也有返回值。在ruby中,方法名称后面可以带有 ? ! 符号。它们被用于标示谓词。问号一般代表方法将返回一个布尔值;感叹号一般标示此方法危险。在ruby核心类中,通常情况下,表示调用此方法后将改变原有对象。