论坛首页 编程语言技术论坛

Ruby 1.9: 中文编程

浏览 19025 次
该帖已经被评为精华帖
作者 正文
   发表时间: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

 

文章太长不好,就此打住~

 

参考文献:

《窈窕淑女》,《零之使魔》,《买凶拍人》

   发表时间:2009-03-13   最后修改:2009-03-13
拍手叫绝阿...
尤其是楼主引用的典故...真太经典了,顺便恶搞了Cucumber和rspec,如果这也算恶搞的话...
我个人投精华!
0 请登录后投票
   发表时间:2009-03-13  
好文,不顶都不行 XDD
那像是true和false也可以想办法用lambda表达式来处理掉。
真就是
_true = -> x, y { x }

假就是
_false = -> x, y { y }

然后把and、or、if之类也照此编码,就能扔掉原本的关键字了 =v=
不过lambda在调用的时候得用[]或者.()这个有点不爽……(更不喜欢用.call)
0 请登录后投票
   发表时间:2009-03-13   最后修改:2009-03-13
这个娱乐性质更多点吧.一般只要支持Unicode,变量(函数包,包....)中文化就是可行的.

不过语言层面上的中文化" 如果.....那么...."没有考虑过,估计得动态语言才行得通吧.
0 请登录后投票
   发表时间:2009-03-13  
RednaxelaFX 写道
好文,不顶都不行 XDD
那像是true和false也可以想办法用lambda表达式来处理掉。
真就是
_true = -> x, y { x }

假就是
_false = -> x, y { y }

然后把and、or、if之类也照此编码,就能扔掉原本的关键字了 =v=
不过lambda在调用的时候得用[]或者.()这个有点不爽……(更不喜欢用.call)


嗯,Ruby的lambda写起来总有些别扭,只有拖尾的块看起来才舒服点
0 请登录后投票
   发表时间:2009-03-14  
中文编程很无聊。。。但是支持unicode是最基本的。1.86的编码问题很不爽
0 请登录后投票
   发表时间:2009-03-14  
Hooopo 写道
中文编程很无聊。。。但是支持unicode是最基本的。1.86的编码问题很不爽

呵呵,娱乐性质这个大家心照就好。在日本也有好几种宣传“母语编程”好处的语言,像是なでしこ之类,不过它们一般都不是以通用语言出现,而是做所谓的高级脚本用。跟传说中的“汉编”(特指)的性质还是不同的。诶,Forth是好东西啊……
0 请登录后投票
   发表时间:2009-03-16  
RednaxelaFX 写道
Hooopo 写道
中文编程很无聊。。。但是支持unicode是最基本的。1.86的编码问题很不爽

呵呵,娱乐性质这个大家心照就好。在日本也有好几种宣传“母语编程”好处的语言,像是なでしこ之类,不过它们一般都不是以通用语言出现,而是做所谓的高级脚本用。跟传说中的“汉编”(特指)的性质还是不同的。诶,Forth是好东西啊……


不纯娱乐,可以
DateTime.new(1949, 10, 1).农历.生肖


现在
DateTime.new(1949, 10, 1).nong_li.zodiac
,都熏死我了!



0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2009-03-17  
理论上支持unicode的语言都行吧.
如果关键字是中文...就爽了
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics