作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 问一个语法上的问题~
时间Fri Oct 12 03:37:32 2007
※ 引述《polarpolar (破啦贝尔)》之铭言:
: 1. 最正规的就是 Catch Exceptions
来个 benchmark 吧 :D
我的结果:
godfat benchmark 3.2$ ruby name.rb
user system total real
NameError
0.830000 0.100000 0.930000 ( 0.945779)
local_variables.include?
0.090000 0.000000 0.090000 ( 0.098461)
global_variables.include?
1.390000 0.040000 1.430000 ( 1.468565)
many variables in global_variables.include?
1.710000 0.050000 1.760000 ( 1.797954)
hash optimized many variables in global_variables
0.030000 0.000000 0.030000 ( 0.026852)
答案是变数很少的时候,local_variables.include? 又快又方便。
但是变数数量多一点时,include? 就会变得很慢了。
这时候用 exception 可能会方便些?要看状况。
最快的还是预先建立 hash 再去 lookup :D 视情况挑一个用吧。
程式开始:
require 'benchmark'
Benchmark.bm{ |bm|
n = 50000
puts 'NameError'
bm.report{
n.times{
begin; var; rescue; end
}
}
puts 'local_variables.include?'
bm.report{
n.times{
local_variables.include? 'var'
}
}
puts 'global_variables.include?'
bm.report{
n.times{
global_variables.include? 'var'
}
}
10.times{ |i| eval("$a#{i} = 1") }
puts 'many variables in global_variables.include?'
bm.report{
n.times{
global_variables.include? 'var'
}
}
puts 'hash optimized many variables in global_variables'
bm.report{
vars = Hash[*global_variables.zip([true]*global_variables.size).flatten]
n.times{
vars['var']
}
}
}
: 我倒是对 method 得用 self.method 来取得 Method 物件比较感冒......
: 不过这是题外话啦。
同感!
不知道是不是 ecma script, or curry function 用惯了呢? :p
所以後来我做了个 alias_method :m, :method ...
有点蠢,不过要写 ooo.method(:xxx) 真的挺烦的。
希望 ruby 能内建 curry function :p
--
#!/usr/bin/ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》
# if a
dog nailed
extra legs that
http://webptt.com/cn.aspx?n=bbs/Ruby/index.html
#
walks like an octopus, and Welcome ~
Ruby@ptt~
#
talks like an octopus, then
◢█◣ http://www.ruby-lang.org/
# we are happy to treat it as
█ http://www.ruby-doc.org/
# if it were
an octopus.
◥ ◤ http://www.rubyforge.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.58.12
1F:→ yjc1:global_variables 管的是 $ 开头的变数, 取 'var' 一定失败 10/12 04:05
2F:→ godfat:就是要失败啊,没差吧,worst case 10/12 08:17