分成几个小方法,是不是更好读一些?
raise ArgumentError unless ARGV.length == 3
hsh = Hash[ARGV.map(&:to_i).zip [:Fizz, :Buzz, :Whizz]]
def rule01(i, h)
:Fizz if i.to_s.include?(h.keys.first.to_s)
end
def rule02(i, h)
ary = h.keys.select {|k| i % k == 0 }
ary.empty? ? i : ary.map{|k| h[k] }.join
end
def filter(i, h)
rule01(i, h) || rule02(i, h)
end
# print
(1..100).each{ |i| puts filter(i, hsh) }
#45 楼 @zhouchongzxc 这。。。有啥悲哀的。工具就是用来利用的。
这效率!!太赞!
月读 ?
你不是一直用 Emacs 吗?
你已经彻底暴露身份了!!
@hiluluke 在性能敏感的场合,也可以用 C/C++ 给 Ruby 写扩展。
@hiluluke Ruby 给人性能慢的感觉是主要是版本 1.8。但是 1.9,2.0,2.1 性能有了很大提高。现在网上的很多评论也是用 1.8 来说事儿,容易给人误导。
总体来说:Ruby 1.9.x 以及后续版本 和 Python 的性能不分伯仲。放心使用就 OK。
#3 楼 @blacktulip 嗯 神眼啊!
大哥,你是来求作业的吗?哈哈
已买。就是内容略少啊! @matz 大神,有时间的话就多写点啊 哈哈
Hash[arr.group_by{|v| v }.map{|k, v| [k , v.size] }]
或
arr.group_by{|v| v }.tap{|h| h.each {|k, v| h[k] = v.size} }
许久不用 Ruby,有些生疏了,见谅。
Mac 下 肯定失败啊。前面说了,这是个 Win 下的一个 dll。其他 OS 你先别想了。
首先你要确定 (Win 下): 1 这个 dll 是 x86 还是 x86_64 的? 2 你的 Ruby 版本是 x86 还是 x86_64 的?
x86 的 Ruby 只能加载 x86 的 dll。 x86_64 的 Ruby 只能加载 x86_64 的 dll。
还有就是你这个 dll 是否有依赖到其他非系统的 import dll, 它们要么放在一起,要么能让系统的 Loader 能找的到也行。
你的 OS 是 Win or Linux ? 32bit ? or 64 bit? Ruby 是 32 or 64 ?
btnetwork.dll 应该是个 Win32 的 PE file,如果你在 非 Win 系统下加载 btnetwork.dll , 当然不行了。 (暂不考虑 Wine 等乱七八糟的玩意)
吃井不忘挖水人!
先 Google 或是先学习一下基础再问,效果会更好。另外,你在 Ruby 论坛问这些,得到回复肯定要少于 C 论坛 或 Linux 论坛。
对于天秤座的人来说,那就是。。。。
可不是嘛
在 Ruby 语言层面,异常处理是 begin,rescue,raise。而 throw 和 catch 则是用于流程控制。Ruby 中的 throw 和 catch 在语言层面上 与 java 的,是两种不同的东东。