锁定老帖子 主题:Ruby 1.9: 中文编程
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-13
最后修改:2009-03-13
突然想起,Ruby 1.9支持中文方法名和变量名!
def 召唤 家丁 case 家丁 when '阿福', '旺财' puts "……少爷,我系#{家丁}……" else puts '……(一段短短的沉默,然后一段长长的沉默)' end end 家丁甲, 家丁乙 = %w[阿福 旺财] 召唤 家丁甲
哼哼,我们可以改造黄瓜或者阿死别克了
alias 龙门阵 Story alias 角色扮演 Scenario alias 假设 Given alias 当 When alias 而且 And alias 于是 Then
不过还是有些限制,类和模块不能用中文名打头(开头加上大写字母还是可以的)
class 家丁 end #=>error: class/module name must be CONSTANT class Q宝宝 end #ok
观众可能会问: if then 怎么整?先想想,大致用法应该是这样吧 如果 女的, 那么{问三围}, 否则{讲再见} 实现起来,我们可以定义如果-那么-否则如下
def 那么 &块 块 end def 否则 &块 块 end def 如果 条件, 真块, 假块=->(){nil} 条件 ? 真块.call : 假块.call end 试一试
def 问三围 puts '小……小柠檬?!小蜜瓜?!不想活了?!' end def 讲再见 puts '不是讲好一小时见血任做吗?你跑不掉的……hehehe……' end [true, false].each {|女的| 如果 女的, 那么{问三围}, 否则{讲再见} }
继续汉化def——很简单
alias 定义 define_method
文章太长不好,就此打住~
参考文献: 《窈窕淑女》,《零之使魔》,《买凶拍人》 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-13
最后修改:2009-03-13
拍手叫绝阿...
尤其是楼主引用的典故...真太经典了,顺便恶搞了Cucumber和rspec,如果这也算恶搞的话... 我个人投精华! |
|
返回顶楼 | |
发表时间:2009-03-13
好文,不顶都不行 XDD
那像是true和false也可以想办法用lambda表达式来处理掉。 真就是 _true = -> x, y { x } 假就是 _false = -> x, y { y } 然后把and、or、if之类也照此编码,就能扔掉原本的关键字了 =v= 不过lambda在调用的时候得用[]或者.()这个有点不爽……(更不喜欢用.call) |
|
返回顶楼 | |
发表时间:2009-03-13
最后修改:2009-03-13
这个娱乐性质更多点吧.一般只要支持Unicode,变量(函数包,包....)中文化就是可行的.
不过语言层面上的中文化" 如果.....那么...."没有考虑过,估计得动态语言才行得通吧. |
|
返回顶楼 | |
发表时间:2009-03-13
RednaxelaFX 写道 好文,不顶都不行 XDD
那像是true和false也可以想办法用lambda表达式来处理掉。 真就是 _true = -> x, y { x } 假就是 _false = -> x, y { y } 然后把and、or、if之类也照此编码,就能扔掉原本的关键字了 =v= 不过lambda在调用的时候得用[]或者.()这个有点不爽……(更不喜欢用.call) 嗯,Ruby的lambda写起来总有些别扭,只有拖尾的块看起来才舒服点 |
|
返回顶楼 | |
发表时间:2009-03-14
中文编程很无聊。。。但是支持unicode是最基本的。1.86的编码问题很不爽
|
|
返回顶楼 | |
发表时间:2009-03-14
Hooopo 写道 中文编程很无聊。。。但是支持unicode是最基本的。1.86的编码问题很不爽
呵呵,娱乐性质这个大家心照就好。在日本也有好几种宣传“母语编程”好处的语言,像是なでしこ之类,不过它们一般都不是以通用语言出现,而是做所谓的高级脚本用。跟传说中的“汉编”(特指)的性质还是不同的。诶,Forth是好东西啊…… |
|
返回顶楼 | |
发表时间:2009-03-16
RednaxelaFX 写道 Hooopo 写道 中文编程很无聊。。。但是支持unicode是最基本的。1.86的编码问题很不爽
呵呵,娱乐性质这个大家心照就好。在日本也有好几种宣传“母语编程”好处的语言,像是なでしこ之类,不过它们一般都不是以通用语言出现,而是做所谓的高级脚本用。跟传说中的“汉编”(特指)的性质还是不同的。诶,Forth是好东西啊…… 不纯娱乐,可以 DateTime.new(1949, 10, 1).农历.生肖了 现在 DateTime.new(1949, 10, 1).nong_li.zodiac,都熏死我了! |
|
返回顶楼 | |
发表时间:2009-03-17
我还真就用上了,ruby 1.8.6
def 农历; @农历 ||= NongLi.new(time); end def 年干十神; [农历.日干.十神(农历.年干)]; end def 月干十神; [农历.日干.十神(农历.月干)]; end def 时干十神; [农历.日干.十神(农历.时干)]; end def 年支十神; 农历.年支.藏干.map{|g| 农历.日干.十神(g)}; end def 月支十神; 农历.月支.藏干.map{|g| 农历.日干.十神(g)}; end def 日支十神; 农历.日支.藏干.map{|g| 农历.日干.十神(g)}; end def 时支十神; 农历.时支.藏干.map{|g| 农历.日干.十神(g)}; end def 年十神; 年干十神 + 年支十神; end def 月十神; 月干十神 + 月支十神; end def 时十神; 时干十神 + 时支十神; end alias 日十神 日支十神 def 十神; 年十神 + 月十神 + 时十神; end |
|
返回顶楼 | |
发表时间:2009-03-17
理论上支持unicode的语言都行吧.
如果关键字是中文...就爽了 |
|
返回顶楼 | |