Welcome to Rainy's blog!

发布新日志

  • 正则表达式-各种操作符的运算优先级

    2008-02-03 14:41:24

    优先级

    操作符

    描述

    \

    转义符

     

    (), []

    圆括号和方括号

     

    *, +, ?, {n}, {n,}, {n,m}

    限定符

     

    ^, $,

    位置和顺序

    |

    “或”操作

  • 正则表达式-定位符

    2008-02-03 14:39:30

    定位符

    描述

    ^

    匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^

    $

    匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' '\r'。要匹配 $ 字符本身,请使用 \$

    \b

    匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'

    \B

    匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'

  • 正则表达式-限定符

    2008-02-03 14:37:23

     

    非打印字符

    描述

    \f

    匹配一个换页符。等价于 \x0c

    \n

    匹配一个换行符。等价于 \x0a

    \r

    匹配一个回车符。等价于 \x0d

    \s

    匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

    \S

    匹配任何非空白字符。等价于 [^ \f\n\r\t\v]

    \t

    匹配一个制表符。等价于 \x09

    \w

    匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'字母或数字;相当于 [0-9A-Za-z]

    \W

    匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'非字母,数字

    \d

    匹配一个数字字符。等价于 [0-9] [0-9]数字;相当于 [0-9]

    \D

    匹配一个非数字字符。等价于 [^0-9]。非数字字符

    \b

    退格符 (0x08) (仅在范围描述符内部时)

  • 正则表达式-非打印字符

    2008-02-03 14:36:27

     

    非打印字符

    描述

    \f

    匹配一个换页符。等价于 \x0c

    \n

    匹配一个换行符。等价于 \x0a

    \r

    匹配一个回车符。等价于 \x0d

    \s

    匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

    \S

    匹配任何非空白字符。等价于 [^ \f\n\r\t\v]

    \t

    匹配一个制表符。等价于 \x09

    \w

    匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'字母或数字;相当于 [0-9A-Za-z]

    \W

    匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'非字母,数字

    \d

    匹配一个数字字符。等价于 [0-9] [0-9]数字;相当于 [0-9]

    \D

    匹配一个非数字字符。等价于 [^0-9]。非数字字符

    \b

    退格符 (0x08) (仅在范围描述符内部时)

  • 正则表达式-特别字符

    2008-02-03 14:35:34

    特别字符

    描述

    ( )

    标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( \)

    []

    范围描述符 (比如,[a - z] 表示在a z 范围内的一个字母), 要匹配 [,请使用 \[

    {}

    标记限定符表达式。要匹配 {,请使用 \{

    \

     

    将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

    例如, 'n' 匹配字符 'n''\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("

    |

    指明两项之间的一个选择。要匹配 |,请使用 \|

    .

    匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \

  • Ruby字符串

    2008-02-03 14:31:26

    %q 用来生成单引号字符串;%Q用来生成双引号字符串。%q或者%Q后面跟着的是分隔符,可以是配对的! !/ /< >( )[ ] { };等等。字符串文档,从 <<和文档结束符的下一行开始,直到遇到一个放置在行首的文档结束符,结束整个字符串文档。
  • Ruby循环语句

    2008-02-03 14:30:43

    while(当…) 循环

     

     

    while 条件

    语句1; 语句2 ; 语句…

    end

    单行 while 循环

    ( 语句1; 语句2 ; 语句… ) while 条件

    until(直到…) 循环

    until 条件 = while not (条件)

    forin 循环

     

     

    for 变量 in 对象

    语句1; 语句2 ; 语句…

    end

    break

    跳出当层循环

    next

    忽略本次循环的剩余部分,开始下一次的循环

    redo

    重新开始循环,还是从这一次开始

    retry

    重头开始这个循环体

    times

    3.times { print "Hi!" } #Hi!Hi!Hi!

    upto

    1.upto(9) {|i| print i if i<7 } #123456

    downto

    9.downto(1){|i| print i if i<7 } #654321

    each

    (1..9).each {|i| print i if i<7} #123456

    step

    0.step(11,3) {|i| print i } #0369

  • Ruby条件判断语句

    2008-02-03 14:26:54

    单行 if(如果) 语句

     

    1)if 条件① then 语句1; 语句2 ; 语句… end

    2)( 语句1; 语句2 ; 语句… ) if 条件

    多行 if 语句

     

     

     

     

     

     

    if 条件

    语句1; 语句2 ; 语句…

    elsif 条件

    语句1; 语句2 ; 语句…

    else

    语句1; 语句2 ; 语句…

    end

    unless(除非) 条件语句

    unless 条件 = if not (条件)

    unless 条件 = if not (条件)

     

     

     

     

     

     

     

     

     

    case 对象

    when 可能性1

    语句1; 语句2 ; 语句…

    when 可能性2

    语句1; 语句2 ; 语句…

    when 可能性…

    语句1; 语句2 ; 语句…

    else

    语句1; 语句2 ; 语句…

    end

     

  • Ruby条件运算符

    2008-02-03 14:25:47

     

    == (等于)

    比较两个对象的值是否相等 ,返回 true, flase

     = (不等于)

    a=1; b=1.0; a==b #true

    eql?

     

    比较两个对象的值、类型是否相等,返回 true, flase

    a=1; b=1.0; a.eql?(b) #flasea为整数型,b为浮点型)

    equal?

     

     

    比较两个对象在内存中地址是否相同,返回 true, flase

    a=1.0; b=1.0; a.equal?(b) #flase

    a=1.0; b=a ; a.equal?(b) # true

    <=>

     

     

    比较两个对象的大小,大于、等于、小于 分别返回1,0,-1

    "aab" <=> "acb" # -1 (第二个 a ASCII 码小于 c

    [5] <=> [4,9] # 1 (第一个元素 5 > 4

    ===

     

     

    右边的对象是否在左边区间之内,返回 true, flase

    puts (0..9)=== 3.14 #true

    puts ('a'..'f')=== 'c' # true

    =~(匹配)

    用来比较是否符合一个正则表达式,返回模式在字符串中被匹配到的位置,否则返回 nil

    !~ (不匹配)

    断言不符合一个正则表达式,返回 true, flase

    <= < > >=

    小于等于 小于 大于 大于等于

  • Ruby运算符

    2008-02-03 14:24:41

     

    优先级

    能否重写

    运算符

    描述

    最高

    Y

    [] []=

    数组下标 数组元素赋值

     

    Y

    **

    乘冥

     

    Y

      ~ + -

    非 位非 一元加 负号

     

    Y

    * / %

    乘 除 模

     

    Y

    + -

    加 减

     

    Y

    >> <<

    右移 左移

     

    Y

    &

    位与

     

    Y

    ^ |

    位异或 位或

     

    Y

    <= < > >=

    小于等于 小于 大于 大于等于

     

    Y

    <=> == === =~ != !~

    各种相等判断(!= !~ 不能重写

     

     

    &&

    短路与

     

     

    ||

    短路或

     

     

    .. ...

    区间的开始点到结束点

     

     

    ? :

    三元条件运算符

     

     

    = %= ~= /= -= += |= &= >>= <<= *= &&= ||= **=

     

     

    各种赋值

    例如:a = 5;

    b += 3( 意思是:b = b+3 )

     

     

     

     

     

     

    defined?

    检查类型

     

     

    not

    逻辑非

     

     

    or and

    逻辑或 逻辑与

     

     

    if unless while until

    判断与循环

    最低

     

    begin/end

    定义方法、类、模块的范围

  • Ruby数组

    2008-02-03 14:23:45

    arr.delete_at(3) #删除3号索引位置元素

    arr.push("b" ) #数组末尾加入元素"b"

    arr.delete("b") #删除所有元素"b"

    arr.insert(3,"d") #3号索引位置插入元素"d"

    arr<<"f"<<2 #加入元素"f";加入元素2

    arr.pop #删除尾元素

    arr.shift #删除首元素

    arr.clear #清空数组arr

    arr_1 | arr_2          #并运算,合并数组,重复部分只出现一次

    arr_1& arr_2 #交运算,求出数组重复部分

    arr_1.sort #排序

    arr_1.reverse #倒置
  • Ruby访问控制

    2008-02-03 14:23:19

     

    访问控制

    意义

    public

    可以被任何实例对象调用,不存在访问控制;

    protected

    可以被定义它的类和其子类访问,

    可以在类中或子类中指定给实例对象;

    private

    可以被定义它的类和其子类访问,

    不能被实例对象调用

  • Ruby异常与线程

    2008-02-03 14:22:37

    Java中的try…catch…finally…throw 相对应, Ruby中用begin/end …rescue…ensure … raise 来处理异常,retry可以用在rescue中。可以只用rescue或是ensure,两者都使用时,rescue必须在ensure前。

     

    attr_writer :motherland 相当于

    def motherland=(value)

    return @motherland =value

    end

    attr_ reader :motherland 相当于

    def motherland

    return @motherland

    end

    attr_accessor :motherland 相当于

    attr_reader:motherland

    attr_writer:motherland

  • Ruby分隔符

    2008-02-03 14:21:45

     

    符号

    名称

    用途

    分号

    用来分隔一行中的多个语句

    ()

    圆括号

    提高优先级;定义方法时容纳参数列表

     

    空格

    分隔字符;在可省略()的地方,代替()

    逗号

    隔开多个参数

    .

    将对象与它的方法隔开

    ::

    紧连的两个冒号

    域作用符,将模块(类)与它的常量隔开

  • require&load

    2008-02-03 14:20:50

    Ø         requireload用于包含文件;includeextend则用于包含模块。

    Ø         require加载文件一次,load加载文件多次。

    Ø         require加载文件时可以不加后缀名,load加载文件时必须加后缀名。

    Ø         require一般情况下用于加载库文件,而load用于加载配置文件

  • Ruby关键字

    2008-02-03 14:19:48

     

    模块定义

    module

    类定义

    class

    方法定义

    def,undef

    检查类型

    defined?

    条件语句

    if,then,else,elsif,case,when,unless

    循环语句

    for,in,while,until,next,break,do,redo,retry,yield

    逻辑判断

    not,and,or

    逻辑值和空值

    true,false,nil

    异常处理

    rescue,ensure

    对象引用

    super,self

    块的起始

    begin/end

    嵌入模块

    BEGIN,END

    文件相关

    __FILE__,__LINE__

    方法返回

    return

    别名

    alias

  • Ruby编程规范

    2008-02-03 14:17:50

    . 命名

    Ø         常量全用大写的字母,用下划线分割单词。

    Ø         类名和模块名用大写字母开头的单词组合而成。

    Ø         方法名全用小写的字母,用下划线分割单词。

    Ø         惊叹号“!”暗示这个方法具有破坏性, 有可能会改变传入的参数。

    Ø         问号“?”表示这个方法是一个布尔方法,只会返回 true false

    Ø         变量和参数用小写字母开头的单词组合而成。

    Ø         类名、模块名、变量名、参数名最好使用名词或者形容词+名词。方法名最好使用动词或者动词+名词

    . 空格和圆括号

    Ø         关键字之后要留空格。

    Ø         逗号、 分号之后要留空格。 向前紧跟,紧跟处不留空格。

    Ø         赋值操作符、比较操作符、算术操作符、逻辑操作符,如“=”“+=” “>=”“<=”“+”“*”“%”“&&”“||”等二元操作符的前后应当加空格。

    Ø         一元操作符如“!”“~”等之后不加空格。

    Ø         []“.”::这类操作符前后不加空格。

    Ø         函数名之后不要留空格,

    . 使用 return

           使用 break 你能够跳出本层循环,如果要从多重循环体中跳出,可以使用return ,结束这个方法; return还能够从方法的某个执行点立即退出,而不理会方法的其余代码,

    . 注释

    注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不要放在代码的下方。

  • 三个输出方法

    2008-02-02 11:10:12

    puts 把它的所有参数写出来,每一个参数结束都加入一个换行符;
    print 也写出它的参数,不过没有换行。你可以指明输出到一个文件,不说明,则一般输出到显示器;
    printf,它按格式输出参数。
    printf "Number: %4.3f, String: %s", 7.8, "hi!"
    运行结果:
    Number: 7.800, String: hi!
    gets ,它从你的程序的标准输入流中返回一行。一般用来从键盘或文件读入一行数据。
  • Ruby学习总结六

    2008-01-29 17:44:49

    Summary Six
    1. A symbol looks like a variable name but it's prefixed with a colon.
    2. You can think of :id as meaning the name of the variable id, and plain id as meaning the value of the variable.
    3. Symbols are useful because a given symbol name refers to the same object throughout a Ruby program.
    4. Symbols can be considered constants without values.
    5. Symbols are more efficient than strings. Two strings with the same contents are two different objects, but for any
    given name there is only one Symbol object. This can save both time and memory.
    6. When do we use a string versus a symbol?
    o If the contents (the sequence of characters) of the object are important, use a string.
    o If the identity of the object is important, use a symbol.
    7. A Symbol object is created by prefixing an operator, string, variable, constant, method, class, module name with a colon.
    8. If Fred is a constant in one context, a method in another, and a class in a third, the Symbol :Fred will be the same object in all three contexts.
    9. Ruby gives you three levels of protection:
    o public - methods can be called by everyone. A class's instance methods are public by default.
    o protected - methods can be invoked only by objects of the defining class and its subclasses.
    o private - methods cannot be called with an explicit receiver - the receiver is always self. This means that private methods can be called only in the context of the current object. The initialize method is always private.
    10. Access control is determined dynamically, as the program runs, not statically. You will get an access violation only when the code attempts to execute the restricted method.
    11. Top-level methods are private instance methods of the Kernel module.
    12. attr_reader is reader only; attr_writer is writer only and attr_accessor is both reader and writer.
    13. Hashes are similar to arrays in that they are indexed collection of object references. However, while you index
    arrays with integers, you can index a hash with objects of any types: strings, regular expressions, and so on.
    14. When you store a value in a hash, you actually supply two objects - the index (normally called the key) and the value.
    15. Hash elements are not ordered, so you cannot easily use a hash as a stack or a queue.
    16. nil is returned when an attempt is made to access keys that do not exist in the hash.
    17. The Time class contains Ruby's interface to the set of time libraries written in C.
    18. Time zero for Ruby is the first second GMT of January 1, 1970.
    19. Ruby's DateTime class is superior to Time for astronomical and historical applications, but you can use Time for most everyday programs.
  • Ruby学习总结五

    2008-01-29 16:26:02

    总结五
    1. 对象是包含了一系列属性和行为的实体。对象的属性用变量表示;对象的功能(可以采取的行为或动作)用方法表示。
    2. 实例变量(属性)代表的是对象的状态。
    3. 方法用来改变对象的状态。
    4. 类是由实例变量和方法组成的。
    5. 类用来构造对象。类是对象的蓝本。
    6. Ruby中有超过30个的内置类。类的继承关系请见class hierarchy。
    7. 在Ruby中,不管是整数还是字符串,任何事物都是对象。并且这些对象内置了一系列方法。如果想调用方法,只要在对象后加一个".",然后跟上方法名就可以了,比如,object.method。有时候,有些方法可以用在任何地方,比如puts和gets,不用加对象名,直接用就可以了。这些方法已经内置在ruby的内核模块里,所有的对象都已经默认继承了这些方法,所以可以直接用。当运行一个ruby程序的时候,一个叫main的对象被创建,它属于object类,是程序的入口。
    8. 表示整数的类是Fixnum和Bignum,它们的区别是位长不同。浮点数用Float表示。
    9. 类的定义方式为,Name...End。
    10. 类在ruby中也是对象,是Class类的对象。
    11. 类是对象,是Class类的对象;Object是一个类。好好理解这句话。
    12. 当定义一个新类的时候,一个Class类的对象被创建,并被分配给一个常量(也就是类名)。当调用.new创建一个类的对象时,会首先调用allocate方法给对象分配内存,然后才是调用initialize方法初始化对象。对象的构造和初始化是不同的,但它们都可以被覆盖。初始化要调用initialize方法;构造是在调用new方法时完成的,所有说initialize不是构造器函数。
    13. 对象是在堆里创建的。
    14. d = Dog.new('Labrador', 'Benzy')。d只是对象的引用,并不是对象本身。
    15. 哪怕是刚创建的一个新对象,它也已经继承了一些方法,使用methods方法可以查看这些方法。其中object_id和respond_to?方法是比较重要的两个。
    16. 在ruby中,每一个对象都会有一个唯一的id,使用object_id方法可以查看这个id。
    17. 使用respond_to?方法能够判断调用的方法是否存在。
    18. Object.class方法来判断当前的对象来自哪个类。
    19. instance_of?方法能够判断对象是否是某个类的实例。
    20. Literal Constructors的意思是,可以用某些特殊的写法来代替new方法创建新对象。
    21. Ruby中的对象堆分配了最少8兆的内存空间。ruby的垃圾回收属于“标记-清除”型。“标记”的过程会检查对象是否仍在使用中。如果对象仍然被某个变量引用,那么它会被打上一个“保留”的标志。如果对象没有被任何变量引用,它不会被打上“保留”标志。
    清除过程只会对没有“保留”标志的对象进行垃圾回收。
    22. 变量是对对象的引用,它不是对象本身,也没有类型。
    23. load方法能把文件引入多次。
    24. require比较常用,它只引用一次,即使多次调用。
    25. require 'filename',不带文件扩展名。
    26. 在Ruby中,Class是开放的。你总是可以修改现有的类(添加或删除内容),不管是自定义的类还是ruby内置的类。并且,这种修改甚至可以不在该类的定义文件中。
    27. 继承的好处是,子类可以继承父类的属性和方法,不需要重新定义,只要加上自己特有的特性就可以了。
    28. Ruby的继承是单继承。
    29. Object是所有类的父类,它的方法可以被继承,也可以被覆盖。
    30. 覆盖允许子类重新实现父类的方法,覆盖父类的实现。
    31. 当你覆盖了某个方法,新的方法就会生效。
    32. super调用父类的同名方法,自动传参数过去。
    33. super()调用父类同名方法,不传任何参数过去。
    34. super(a,b,c)调用父类同名方法,传参数a,b,c过去。
    35. Ruby中,方法名是唯一的,重载需要写在一个方法中。

261/212>
Open Toolbar