ruby去除换行符 chomp

Ruby中String类的类方法chomp的语法

2007-04-25 09:06

String.chomp

----------------------------------------------------------- String#chomp

str.chomp(separator=$/) => new_str

------------------------------------------------------------------------

Returns a new +String+ with the given record separator removed from

the end of _str_ (if present). If +$/+ has not been changed from

the default Ruby record separator, then +chomp+ also removes

carriage return characters (that is it will remove +\n+, +\r+, and

+\r\n+).

移除chmop给出的分离字符串,并返回一个新的字符串。如果$/没有改变还是Ruby的默认分离符

,那么chomp也会移除在字符串尾部的\n,\r,\n\r(注:即回车符,换行符,回车换行符)

"hello".chomp #=> "hello"

"hello\n".chomp #=> "hello"

"hello\r\n".chomp #=> "hello"

"hello\n\r".chomp #=> "hello\n"

"hello\r".chomp #=> "hello"

"hello \n there".chomp #=> "hello \n there"

"hello".chomp("llo") #=> "he"

另外一个无用函数

Ruby中的String#squeeze的用法

2007-04-25 09:51

String.squeeze

--------------------------------------------------------- String#squeeze

str.squeeze([other_str]*) => new_str

------------------------------------------------------------------------

Builds a set of characters from the _other_str_ parameter(s) using

the procedure described for +String#count+. Returns a new string

where runs of the same character that occur in this set are

replaced by a single character. If no arguments are given, all runs

of identical characters are replaced by a single character.

大意是:如果指定的other_str字符串在str中有多于一个,则被压缩成1个,如果没有指定

那么将压缩str中的所有重复的字符

"yellow moon".squeeze #=> "yelow mon" 没有指定,压缩所有

" now is the".squeeze(" ") #=> " now is the" 指定了空格符

"putters shoot balls".squeeze("m-z") #=> "puters shot balls" 指定了m n o p q r s t u v w x y z

String#chomp方法有一个字符串参数,指定了要在末尾删除的子字符串。如果不用这个参数,则会将字符串末尾的n,r和rn删除(如果有的话)。

rails 字符操作基础

http://blog.csdn.net/sheismylife/archive/2009/10/09/4646140.aspx

Ruby 异常处理

文章分类:Ruby编程 关键字: ruby 异常 异常处理

异常处理是开发过程中经常要面对的问题,基本所有高级语言都有自己的异常处理系统,ruby也不例外,而且使用起来也非常简单。

ruby中异常的抛出是使用的raise方法,记住哦,这是个方法,由ruby Kernel提供的,而不是关键字,同时ruby也为这个方法提供了一个别名fail,可以用fail代替raise,抛出异常的例子如下:

Ruby代码

  1. raise #抛出一个默认的RuntimeError
  2. raise "Some error message" #抛出一个消息为"Some error message"的RuntimeError
  3. raise ArgumentError #抛出一个无消息的ArgumentError
  4. raise ArgumentError, "Bad data" #抛出一个消息为"Bad data"的ArgumentError
  5. raise ArgumentError.new("Bad data") #同上
  6. raise ArgumentError ArgumentError, "Bad data", caller[0] #抛出一个包含消息的格式为filename:line 或者 filename:line:in 'method' 的异常

以上代码中的raise可以使用别名fail代替,在没有明确的给出异常类型时,ruby默认抛出RuntimeError,其中最后一个例子抛出的信息包含了当前错误所在的文件,行数已经所在的方法的信息,这些信息都存储在caller这个数组中,里面包含了方法调用者的相关信息,第一个元素包含了方法的调用者的信息,第二个信息包含了方法调用者的调用者的信息,以此类推。这个数组在我们想知道异常是在哪个地方的哪个调用被抛出的时候非常有用的。

Ruby代码

  1. def func1
  2. puts caller #打印调用者信息
  3. end
  4. def func2
  5. func1 #第六行
  6. end
  7. def func3
  8. func2 #第十行
  9. end
  10. func3 #最终调用者,十三行
  11. #运行结果
  12. #test.rb:6:in `func2'
  13. #test.rb:10:in `func3'
  14. #test.rb:13

从上面的代码可以看出,caller记录了每个调用者所在的文件名,行数以及方法。

上面讲解了关于ruby异常抛出的方式以及caller数组的作用,接下来我们来了解一下ruby中是如何进行异常的捕捉的,在java中,异常的捕捉是在try ... catch当中进行,而ruby则是在begin ... end代码块中进行异常的捕捉,在该代码块中使用rescue关键字进行捕捉异常类型,注意哦,这个是关键字,而不是方法。

Ruby代码

  1. begin
  2. ...... #可能出现异常的代码
  3. rescue errorType1 #要捕捉的异常类型
  4. ...... #处理异常的代码
  5. rescue errorType2 #要捕捉的异常类型
  6. ...... #处理异常的代码
  7. end

以上代码就是一个大概的捕捉异常的例子,在begin和end代码块中通过rescue进行异常类型的捕捉然后进行适当的处理,可是如果抛出的异常类型并没有显示的捕捉如何处理呢?那就是在最后使用else,如下:

Ruby代码

  1. begin
  2. ...... #可能出现异常的代码
  3. rescue errorType1 #要捕捉的异常类型
  4. ...... #处理异常的代码
  5. rescue errorType2 #要捕捉的异常类型
  6. ...... #处理异常的代码
  7. else
  8. ...... #如果以上代码类型都没有捕捉到,则运行该段代码
  9. end

这时又有一个问题,如果我想获取异常信息又该如何做呢?请看下面的代码:

Ruby代码

  1. begin
  2. raise ArgumentError, "Bad data"
  3. rescue => err
  4. puts err
  5. end

通过rescue => variable的方式,就可以将异常保存为一个variable了。又解决了一个问题,还有什么问题呢?啊,对了,在java的使用当中,比如使用 Connection进行数据库连接后,最后一定要进行资源的清理,都是在finally块当中进行的,可是在ruby中又如何进行这些资源的清理呢?看看下面的代码:

Ruby代码

  1. begin
  2. raise ArgumentError, "Bad data"
  3. rescue => err
  4. puts err
  5. ensure
  6. ... #执行清理工作
  7. end

从上面代码我们看到,ruby提供了一个关键字ensure,它的作用和java中的finally一样,无论任何异常,该关键字下的代码都必然会在退出代码块前执行。同时,ruby还提供恢复功能,如果在抛出异常并进行异常处理后我们需要进行恢复工作,那就是使用retry就会重新执行代码块了。

上面提到,异常的捕捉处理必须在begin-end代码块中进行,那是不是无论什么时候都要书写begin-end这两个关键字呢?其实也不是,在 ruby中,方法实际上就是一个隐式的begin-end代码块,所以在方法中进行异常的捕捉和处理,可以省略begin。

本文参考——《The Ruby Way》