- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Ruby语言的动态特性
一、Ruby的动态特性
Ruby是一门动态解释型语言,动态特性是相对静态语言的,动态性为代码提供了运行时检查和修改程序的能力,能够让程序在运行时不断的调整适应不同的情况,甚至可以说动态性能让程序自己构造并执行代码,也就是元编程。
Ruby的动态特性特现在以下几个方面:
动态执行字符串形式的代码
动态获得模块或者类中的常量和变量值
动态为类或者对象添加方法
对位置变量和方法的动态处理
动态删除定义
二、动态执行字符串形式代码
eval是功能强大的动态执行函数,它能够编译并执行任何包含Ruby代码段的字符串。
在无法控制字符串内容的情况下,eval是非常不安全的,恶意用户可能会利用它执行有害代码,Ruby中还有class_eval、module_eval和instance_eval,它们都具有动态执行字符串形式代码的能力
class_eval是在类的上下文范围中奖字符串作为代码来执行,module_eval是在类或者模块的上下文中执行,instance_eval则是在实例的上下文范围中执行。
classString
deftruncate(n)
self[0,n]+(self.sizen?....:)
end
foriin[5,8,10,20]
module_evaldeftruncate_#{i}
truncate#{i}
end
end
end
putsstark.truncate(2)
putspeter.truncate_20
putsCaptainAmerican.truncate_10
执行上述代码,输出结果如下:
st....peterCaptainAme....
上述代码中为String类定义了一个truncate方法,用来截取指定长度的字符串并加上省略号,这个功能常用在标题的显示或者文章简介中。代码通过module_eval创建了4个实例方法,避免了使用时再次传递参数。
对象的send方法可以用作动态调用对象的方法,send方法的参数为具体的方法名的字符串形式。
putstony.upcase#TONYputstony.send(upcase)#TONY
三、动态获取类或模块中的方法、变量和常量值
方法的获取
Ruby中的对象都具有methods方法,该方法返回的对象包含了所有公开方法的数组。
instance_methods方法则返回所有公开的实例方法名,相应的protected_methods和private_methods则返回被protected和private关键字修饰的方法。
method_defined?用于检查类中是否定义了指定的实例方法,response_to?用于检查类是否能够响应某实例方法的调用。
putsInteger.methods#返回数值对象的所有public修饰的方法putsInteger.instance_methods#返回数值对象的所有public修饰的方法putsString.protected_methods#返回字符串对象的所有protected修饰的方法putsString.method_defined?(:upcase)#true表示String类中定义类upcase方法putsstr.respond_to?(:upcase)#true表示str字符串可以调用upcase实例方法putsstr.respond_to?(:sqrt)#falsesqrt是数字对象调用的方法,str字符串不可以调用,返回false
常量的获取
const_get方法可以根据常量的名称来获取模块或者类中的常量的值,例如获取Math对象中PI常量的值,除了const_get之外还有:
const_defined?:用判断常量是否定义
constants:获取全部常量值等
const_set:用于定义一个常量,并返回常量的值
const_defined?:用判断常量是否定义
constants:获取全部常量值等
const_set:用于定义一个常量,并返回常量的值
putsMath.const_get(PI)
putsMath.const_defined?(:P)#false
putsMath.const_set(P,1000)#1000
putsMath.const_defined?(:P)#true
putsMath.constants
执行上述代码,
您可能关注的文档
- 2018-2019年最新人教版九年级化学下册第十单元-酸和碱期中试卷A4打印.docx
- 2019-2020年度人教版八年级物理下册第十章浮力月考试卷精品.docx
- 2021-2022学年度八年级数学下册模拟测试卷-614.docx
- 2021-2022学年度八年级数学下册模拟测试卷-2221.docx
- 2021-2022学年度八年级数学下册模拟测试卷-3063.docx
- 2021-2022学年度八年级数学下册模拟测试卷-6961.docx
- DeepSeek提示词使用技巧.docx
- Java实现责任链策略模式优雅处理多级请求的方式.docx
- JAVA实战订单超时自动取消设计方案.docx
- Java线程池原理详解.docx
- 2024年陕西咸阳亨通电力(集团)有限公司供电服务业务部直聘用工招聘145人笔试参考题库附带答案详解 .docx
- 2024年中建四局土木工程有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年四川雅茶贸易有限公司公开招聘和考察聘用人员3人笔试参考题库附带答案详解 .docx
- 2024年中国烟草总公司辽宁省公司公开招聘拟录用人员(166人)笔试参考题库附带答案详解 .docx
- 2024江苏连云港中诚物业管理有限公司招聘工作人员1人笔试参考题库附带答案详解 .docx
- [毕节]2025年贵州毕节市引进人才649人笔试历年参考题库附带答案详解.docx
- 2024年度中国东航技术应用研发中心有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年福建省厦门盐业有限责任公司春季人才招聘1人笔试参考题库附带答案详解 .docx
- 2024年山东省环保发展集团绿能有限公司职业经理人招聘2人笔试参考题库附带答案详解 .docx
- 2024年安徽滁州郊源阳光电力维修工程有限责任公司招聘41人(第一批次)笔试参考题库附带答案详解 .docx
文档评论(0)