解析.NET程序员 Ruby核心语法入门(7)_.Net教程
推荐:关于URL的传递字符串问题的研究前几天在调程序的时候遇到了比较郁闷的问题,我用URL从一个页面传递字符串到另一个页面的时,出现了个奇怪的问题,我要传递的字符串是“DK51 700中继站”;可是另一个页面接收到
元编程
即使Ruby没有属性,你也可以使用函数调用,通常不需要括弧来模拟属性,你也需要影响Ruby以“=”结束函数的特殊处理方式,让它们担当调节器的作用。
你可以象下面这样定义一个person类:
irb(main):001:0> class Person
irb(main):002:1> def age
irb(main):003:2> @age
irb(main):004:2> end
irb(main):005:1> def age=(value)
irb(main):006:2> @age = value
irb(main):007:2> end
irb(main):008:1> end
=> nil
接下来就可以使用person类的实例,将age当作person类的一个属性来处理,如:
irb(main):009:0>p = Person.new
=># 如果你想将age的默认值设为一个非零的值,那么你可以使用initialize函数来设置。
这个代码显得非常标准,如果这是一个类似c#的语言,你可能会使用类似Visual Studio中片段,甚至静态代码的产生会自动生成reader和writer的属性。
在Ruby中,你可以使用元编程做一点努力就可以创建这些事物,理想情况下,你可以编写类似下面这样的代码:
class Person
prop :age
end
你应该在对象上定义个类(静态)函数以便你在定义自己的类时可以使用它,你也可以使用一个你还没有看到过的函数,class_eval函数,如:
irb(main):001:0> class Object
irb(main):002:1> def self.prop *names
irb(main):003:2> names.each { |name|
irb(main):004:3* self.class_eval "
irb(main):005:3" def #{name}
irb(main):006:3" @#{name}
irb(main):007:3" end"
irb(main):008:3> self.class_eval "
irb(main):009:3" def #{name}=(value)
irb(main):010:3" @#{name} = value
irb(main):011:3" end"
irb(main):012:3> }
irb(main):013:2> nil
irb(main):014:2> end
irb(main):015:1> end
=> nil
上面使用的class_eval函数是创建了另外一个函数结束的,它给字符串赋值,因此你可以在你的类中编写自己的函数。
每个传递给prop函数的名字向新类添加了两个函数:getter和setter。最终使用你传递给prop的名字替换掉#{name}。
接下来,你可以在你的类定义中使用prop了,如:
irb(main):016:0> class Person
irb(main):017:1> prop :age, :name
irb(main):018:1>
irb(main):019:1* def initialize(age, name)
irb(main):020:2> @age = age
irb(main):021:2> @name = name
irb(main):022:2> end
irb(main):023:1> end
=> nil
irb(main):024:0> p = Person.new(36, "Brad")
=> # 在你的环境中有了这些便利的工具后,你可以更快速地创建更高层次的类,使用这些元编程技巧可以帮助你工作得更好,不需要依赖于编辑片段或编译时代码生成。
小结
本文只是对Ruby中便利工具做了一个皮毛介绍,今天学习好Ruby可以在当Ruby.在.NET和Silverlight中可用时帮助你,有这么强大的一个动态编程语言,你的编程工具箱也会扩宽许多,但更重要的是,它可以帮助你开始以一种新的方式思考问题和解决方案。
分享:.NET Framework 3.5 SP1正式版微软今天发布了.NET Framework 3.5第一个SP服务包的最终版.这是一个累积更新,包含很多基于.NET Framework 2.0、3.0和3.5不断生成的新功能,此外还包括.NET Framework 2.0 SP2和.NET Framewo
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP发送Email实例(可带附件)
- js实现广告漂浮效果的小例子
- asp.net Repeater 数据绑定的具体实现
- Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
- Asp.net获取客户端IP常见代码存在的伪造IP问题探讨
- VS2010 水晶报表的使用方法
- ASP.NET中操作SQL数据库(连接字符串的配置及获取)
- asp.net页面传值测试实例代码
- DataGridView - DataGridViewCheckBoxCell的使用介绍
- asp.net中javascript的引用(直接引入和间接引入)
- 三层+存储过程实现分页示例代码
- 相关链接:
- 教程说明:
.Net教程-解析.NET程序员 Ruby核心语法入门(7)。