- 消えるend : (2005/12/09)
-
Case〜WhenとかDo〜Whileとかをmethod化
Rubyからendを無くしてみる
endless.rb
require 'endless.rb'
include Endless
# 適当なArray
ls = [1,2,3,4,6,7,10,11,12]
Do{
n = ls.shift()
If(n > 10){
puts "Large: " + n.to_s()
}.Elsif(n > 5){
puts "Middle: " + n.to_s()
}.Elsif(n > 0){
puts "Small: " + n.to_s()
}.Else{
puts "<= Zero?"
}
}.While(ls.length() > 0)
Doメソッドの戻り値のオブジェクトがWhileメソッドを持っており、Whileメソッドの引数が真なら、Doメソッド中で生成したContinuation(継続)を呼び出すことでジャンプを行い、その結果ブロックとして与えられたコード片を再評価することでループを表現している
(でも、これはあまり良い例ではないか、Rubyではこういう走査は普通イテレータを使う)
caseは以下のような感じか
require 'endless.rb'
include Endless
v = 3
Case(v).When(0){
puts "zero"
}.When(1){
puts "one"
}.When(2 .. 5){
puts "2 ~ 5"
}.Else{
puts "other"
}
一応Do〜UntilとかUnless〜Elsif〜Elseとかもある
ループ系の問題点はbreakが使えない点(何かうまい手があれば・・・)