ruby rescue

ruby的异常处理和java很相似

begin
  ...
rescue
  ...
end

rescue默认只会接受StandardError

irb(main):001:0> begin
irb(main):002:1* 1 / 0
irb(main):003:1> rescue
irb(main):004:1> puts "divide 0"
irb(main):005:1> end
divide 0

但是像SyntaxError并不是继承StandardError的,就无法被resuce

irb(main):001:0> begin
irb(main):002:1* eval("1 +")
irb(main):003:1> rescue
irb(main):004:1> puts "syntax error"
irb(main):005:1> end
SyntaxError: (eval):1:in `irb_binding': compile error
(eval):1: syntax error, unexpected $end
   from (irb):2
   from (irb):2
   from :0

这种情况必须指定相应的Error或者是所有异常的基类Exception

irb(main):001:0> begin
irb(main):002:1* eval("1 +")
irb(main):003:1> rescue Exception
irb(main):004:1> puts "syntax error"
irb(main):005:1> end
syntax error

最后附上Exception Hierarchy

Exception
 NoMemoryError
 ScriptError
   LoadError
   NotImplementedError
   SyntaxError
 SignalException
   Interrupt
 StandardError
   ArgumentError
   IOError
     EOFError
   IndexError
   LocalJumpError
   NameError
     NoMethodError
   RangeError
     FloatDomainError
   RegexpError
   RuntimeError
   SecurityError
   SystemCallError
   SystemStackError
   ThreadError
   TypeError
   ZeroDivisionError
 SystemExit
 fatal

Posted in  ruby


Ubuntu安装msttcorefonts

前一段时间装了N次Ubuntu,又回到了8.04版本。不过每次在安装msttcorefonts的时候都会失败,原因是家里的网络不好,而ubuntu下载字体的timeout又很小,所以每次肯定是失败了。

怎么办呢?只能上http://sourceforge.net/projects/corefonts/files/把所有的字体都手动下载下来,为每个字体的.exe文件都对应创建一个.done文件。然后sudo apt-get install msttcorefonts,同时复制所有的字体.exe和.done文件到/tmp/msttcorefonts-xxx目录下面(其中xxx可能是任意字符),这样就完成了msttcorefonts的安装了。

Posted in  linux


使用tsocks给terminal设置socks代理

家里的rubygem一直不正常,一开始以为是环境配置有问题,昨天重装系统,发现原来是加了gemcutter的sources有问题。

执行gem sources -a http://gemcutter.org,报告下载http://gemcutter.org/specs.4.8.gz timeout了,在公司是没问题的,怀疑是有线通的问题。没办法,只能求助于代理了,网上都是介绍为termial增加http proxy的。要使用socks代理的话,还是要求助于tsocks了。

apt-get install tsocks之后,打开配置文件/etc/socks.conf,修改server和server_port值,分别为socks代理的host和port。

接下来就可以在terminal使用tsocks了,比如sudo tsocks gem sources -a http://gemcutter.org,执行后面的命令就可以通过socks代理来处理网络请求了。

Posted in  linux


autotest notify for Ubuntu

一直很羡慕Mac下的growl,每次autotest都可以弹出个提示框,好眩。如今Ubuntu的用户也有了自己的通知系统notify OSD,赶紧用到自己的autotest上面。

google了一下,已经有人做了gem来调用ubuntu notify osd,http://github.com/stack/autotest-notify-osd

sudo gem install autotest-notify-osd

安装好这个gem之后,在~/.autotest下增加下面一行

require 'autotest/notify-osd'

运行autotest,返回sh: notify-send: not found错误,原来少装了libnotify-bin

sudo apt-get install libnotify-bin

再次运行autotest,右上角显示所有的测试都通过,太cool了

Posted in  ruby linux


Ruby triple equal

今天读sexp_processor源代码,看到有多出调用 Class === Object 这样的语法,突然之间没想出来===是干嘛的了。网上搜索了一下,原来是判断后面这个对象是不是前面这个类的实例,比如

>> Object === Object.new
=> true

这个和is_a?不就没区别了吗?

>> Object.new.is_a? Object
=> true

google一把,好像是说===比is_a?更优雅,而且===被用在case...when的语法当中

case shape
when Square, Rectangle
  # ...
when Triangle
  # ...
else
  # ...
end

上面这段代码摘自Programming Ruby

Posted in  ruby


Fork me on GitHub