DSL

对“元编程”很陌生

// 电话号码的形式 -- 在文件phonebook.txt中
{
    "Bob Smith" : "5195551212",
    "Mary Walsh" : "4162223434"
}

// 把列表代碼解釋為Io散列表的形式
OperatorTable addAssignOperator(":", "atPutNumber")
curlyBrackets := method( // 遇到大括号就就调用curlyBrackets方法
    r := Map clone  // 建立空映射
    call message arguments foreach(arg,
         r doMessage(arg) 
         // doMessage(arg) 调用atPutNumber
         // 将"Bob Smith" : "..." 变成 atputNumber("Bob Smith", "...")  
         )
    r // 程序最终返回r
)

Map atPutNumber := method(
    self atPut(
        call evalArgAt(0) asMutable removePrefix("\"") removePrefix("\""),
        call evalArgAt(1)
    )
    s := File with("phonebook.txt") openForReading contents // 打开文件的一套操作 
    phoneNumbers := doString(s) // 将文件的内容变成Io代码(字符串)
    phoneNumbers keys println
    phoneNumbers values println
)

DSL相关内容
The End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值