Case 表达式
Ruby的 case 表达式非常强大,就像多个if的固化物一样。它有两种风格。
第一种风格特别像多个if语句:它让你列出一些条件并执行第一个条件为true的语句。例如,闰年必须可被400除,或可被4除而不可被100除。
leap = case
when year % 400 == 0: true
when year % 100 == 0: false
else year % 4 == 0
end
第二种风格的case语句或许更常用。你在case语句的顶部指定一个目标,然后每个when子句列出一或多个比较。
...
Break, Redo, 和 Next
循环控制结构 break, redo, 和 next 让你可以改变循环或者迭代器的流程。
break 立即结束当前循环;然后跳出去执行循环后面的语句。redo从这次循环体的头开始重新执行,但是不会在对条件进行运算或者从迭代中取下一个值。next跳到本次循环末尾,开始执行下一次循环。
while line = gets
next if line =~ /^s*#/ # skip comments
break if line =~ /^END/ # stop at end
# substitute stu ...
Range对象表现为一个间隔,有开始与结束的值集。Range对象可以由范围操作符s..e及s…e字面值,或者用Range::new构建。由..操作符构建的Range对象包括范围的终点end值,而由…操作符构建的Range对象不包括范围的终点end值。当用于迭代器对象时,Range对象返回序列内的每一个值。
例如:
for i in 1..5
…
end
生成从1到5的Range对象,然后对分别每个值进行迭代操作。
再如:
(-1..-5).to_a #=> [](-5..-1).to_a #=> [-5, -4, - ...
J2EE app 一般都有用到 xDoclet 做一些宣告然後再產生程式碼. Java 1.5 開始支援 Annotation 功能來解決這方面需要. 其實 Ruby 拜本身就是 dynamic 語言之賜, 它這方面的方法可就高明多了, 這也就是為何 Rails 看起來又像是 metaprogramming 的原因.
請參考這篇說明, Metaprogramming Ruby
Ruby 不用 setXXX, getXXX, 而是用稱為 attribute accessor 這種方法.
class Book
def initialize(title)
...
MD5 計算
require 'digest/md5'
puts Digest::MD5.hexdigest("Hello World!")
計算檔案的 MD5, 可以確保檔案未曾被修改
require 'digest/md5'
#method 1
puts Digest::MD5.hexdigest(File.read("o.rb"))
#method 2
class Digest::MD5
def self.open(path)
o = new
File.open(path) { |f|
buf = ""
...
Ruby 的 block 是個不錯的設計. 一個 block 就是一些程式碼, 其 context 為正在動態執行的環境. 有點像是一般稱為 callback 機制, 但 block 方法精巧多了
當你呼叫 method 時, 你可以給它一個 block. 下面 “each” 是 method, do ~ end 中間就是 block, |x|, x 就是傳給 block 的參數.
books = ["Ruby", "Rails"]
books.each do |b|
puts b
end
那麼 method 裡如何執行 block? 利用 “yield”
...
- 浏览: 1199 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
在ASP.NET 2.0中实现URL ...
不知道这样的方式和ISAPI的插件模式,在效率上有什么差别。
-- by 风中独火 -
在ASP.NET 2.0中实现URL ...
<system.web> <urlMappings enabl ...
-- by hunter001201 -
向页面传值接收不到
没人知道吗`````````````````````问题已经解决`````
-- by litoueva






评论排行榜