BASIC 風 DSL (嘘)

Rubyでは行番号がどうやっても無理で

Scala DSLによるBASIC実装 - Greenbear Diary (2009-04-07)

全くその通りで悔しいので、せめていんちきを。

# coding: UTF-8
require "basic"

basic do
 10 PRINT "Hello world!"
 20 END 
end

以下ソース。

class << Object
  def const_missing(*)
  end
end
def basic(&blk)
  class << env = Object.new
    alias PRINT puts
    def method_missing(*)
    end
  end
  env.instance_eval(&blk)
end

1.8 で動かすときは -Ku を。こないだちょうど「この挙動が紛らわしい」と聞いたので、ちょっと活用してみた。


追記 一発ネタとはいえ、上の basic.rb は投げやりすぎたので書き直し。

class BasicEnv
  alias PRINT puts
  def method_missing(*)
  end
  def self.const_missing(*)
  end
end

def basic(&blk)
  BasicEnv.new.instance_eval(&blk)
end

と思ったけどこれ 1.8 で動かないな。