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

面向变量编程

浏览 9699 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-17  
为什么ruby语言无接口(interface)?说说我的看法。

"接口"是一种把一组"代码"作为其值的"变量",类似于"语言包"的作用(其值可以为en.lang,zh.lang等等)
"变量"的值可以为数字,字符串。。。一直到如今的"代码"本身作为其值。
变量变量,就是可能会变化的量:所以如果代码可能会发生变化,那么代码就可以用变量表示,所以接口即变量

把"代码"本身作为变量的值,是任何有接口(interface)这个关键字的oop语言的一个进步。另外,ruby语言里没有interface这个关键字,但是把"代码本身作为变量的值"的现象却无处不在。所以,接口只不过是把"代码本身作为变量的值"的办法中的一个;而ruby语言不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了。

所谓的面向接口编程,就是面向代码可能会被更换(变化),所以用代码的变量,也就是接口来处理的办法,因此,从这样的意义上看它,面向接口编程依然是在面向变量编程。

"变量"从表示数字,字符串...到表示对象,接口,以及更一般的“代码本身”,所有的一切,都是面向变量编程。
一言以蔽之,无论你面向什么编程,都是在面向变量编程。无论过去,现在,还是未来。。。



   发表时间:2007-01-17  
有见地
0 请登录后投票
   发表时间:2007-01-17  
有道理,如果楼主能把ruby中涉及的相应的内容详细说一下就更好了

ruby语言是怎样不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了
0 请登录后投票
   发表时间:2007-01-17  
sizhefang 写道
有道理,如果楼主能把ruby中涉及的相应的内容详细说一下就更好了

ruby语言是怎样不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了


关于“用代码来生成新的代码”,说说我的体会

5.times do |i|
  File.open("temp.rb","w") do |f|
   f.puts "module Temp"
   f.puts " def Temp.var"
   f.puts " #{i}"
   f.puts " end"
   f.puts "end"
 end
 load "temp.rb"
 puts Temp.var
end

输出:

0
1
2
3
4


我觉得这段代码可以很好得诠释ruby的动态能力。
代码中动态得创建了一个temp.rb文件,内容就只有一个module,其中有一个module级别的方法 var,将接收到的参数显示出来。
主程序导入temp.rb并将参数传入其中执行之。我认为这就是典型的“用代码来生成新的代码”

这样做可以有很多好处,比如更改服务器的配置文件而无需重启服务器等等
0 请登录后投票
   发表时间:2007-01-17  
还要file.open干什么,直接eval不就得了
实际上用元编程是一件危险,复杂,不可控的事情,我觉得这种手法最奇妙的地方就是赋予了程序结构生物性,代码不再是静态的需要你来管理的结构,而是有自主意识,自我构建能力的生物,你只需要给他模糊简单的抽象特性,他就会给你完成细节和实现,构建出大规模的系统,这是我最近玩元数据和面向特性编程的体会
0 请登录后投票
   发表时间:2007-01-17  
那可不是
变量只是图灵机模型中的一部分
而在FP中根本就没这概念
0 请登录后投票
   发表时间:2007-01-17  
whisper 写道
那可不是
变量只是图灵机模型中的一部分
而在FP中根本就没这概念

即使是FP依然存在变量,或者说,那已经是另外一种变量了

考虑一下命令式编程语言里的“常量”---不要奇怪,如果我说“常量依然是一种变量”,那也不是奇怪的事情。例如:
const A=1

虽然A=1后不能继续让A=2。但是你依然可以把第一次的1修改为2.

说个笑话,动词是什么词?其实“动词”是个名称,“动词”是名词。
0 请登录后投票
   发表时间:2007-01-17  
FP另类指南:
http://chn.blogbeta.com/232.html
0 请登录后投票
   发表时间:2007-01-17  
c 里面 define 的害处就忘了?莫非时代在倒退,代码生成的技术又走上台面了。
0 请登录后投票
   发表时间:2007-01-18  
再讨论深点就是哲学了。一生二,二生三,三生万物,推来推去,只是01而已。
0 请登录后投票
论坛首页 编程语言技术版

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