ruby way之动态特性之一

1 动态的evaluate代码

全局的方法eval 编译并且执行一段包含ruby代码片断的字符串,这是一个很power的机制,因为它允 许你建造在运行时

执行的代码。看下面的例子:

Ruby代码

parameters = {} 
 
ARGF.each do |line| 
 name, expr = line.split(/\s*=\s*/, 2) 
 parameters[name] = eval expr 
end

假设输出是这样的:

引用

a = 1

b = 2 + 3

c = `date`

然后你的parameters 应该是这样的{"a"=>1, "b"=>5, "c"=>"Mon Apr 30 21:17:47 CDT 2001\n"}. 不过这样的话,危

险性很高,假设你传入一个 "rm *"那么就很郁闷了。

ruby有三个方法来做到在运行时evaluate代码,class_eval, module_eval, 和instance_eval,前两 个是同义的,而这三

个方法其实所做的事都是一样的,他们都是evaluate 一个字符串,或者一个block,但是在做这件事 的时候,他们会把

self改变为他们自己的接收者.如果你想看一些例子,推荐你去看ruby的内置库delegate.rb.

eval 方法还能够在局部变量的创建域外面调用evaluate.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串
, 方法
, 代码
, ruby
, parameters
一个
the ruby way 3rd pdf、the ruby way、the ruby way pdf、learn ruby hard way、the ruby way中文版,以便于您获取更多的相关知识。

时间: 2024-10-28 01:45:24

ruby way之动态特性之一的相关文章

ruby way之动态特性之二

1 得到所定义的实体的列表 ruby的反射api能够使我们在运行时检测类和对象.因此我们下面将会介绍Module, Class, 和Object 中的定义的一些方法. Module模块有一个constants 的方法,它将会返回系统中所有的常量名,包括类名和模块名.nesting 方法则是返回当前调用点上的嵌套的模块的列表. Ruby代码 list = Math.constants # ["E", "PI"] Module#ancestors 返回指定的类或者模块的

PHP中动态特性学习笔记(1/3)

本文主要总结给对PHP 特性不了解的新手看的,因此演示代码占比较多的篇幅. 大家看还缺哪些给补充吧.欢迎来邮件或在PHPChina 的<PHPer>杂志版块纠正错误. 动态语言就是能够在运行时改变程序结构和变量类型的语言.例如:新的类和对 象可以被加载和创建,新的函数或方法可以加入和去除等等,比如Smalltalk.Ruby. Python.PHP.Lua.Perl.Groovy 等.反之则是静态语言,比如C/C++.Java.C#等. 动态语言的动态特性决定它开发的时候需要更少的代码,有更高

深入Objective-C的动态特性

Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loading). 这些动态特性都是在Cocoa程序开发时非常常用的语言特性,而在这之后,OC在底层也提供了相当丰富的运行时的特性,比如枚举类属性方法.获取方法实现等等.虽然在平常的Cocoa开发中这些较底层的运行特性基本用不着,但是在某些情况下如果你知道这些特性并合理加以运用的话,往往能事半功倍- 动态特性基

C# 动态语言特性,dynamic 关键字研究

原文:C# 动态语言特性,dynamic 关键字研究 1       动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 JavaScript 根本没使用过,别人一定把你当成从火星回来的吧! 很多使用过 JavaScript 的程序员,刚开始对其动态特性深恶痛绝,欲除之而后快,但是一旦熟悉这个语言以后,又会发疯般的爱上她(我的野蛮女友). 以创建一个"人"为例,

JDK6新特性:脚本语言支持(Scripting)

概述 JDK6增加了对脚本语言的支持(JSR 223),原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode后再执行,所以比原来边解释边执行效率要高很多.加入对脚本语言的支持后,对Java语言也提供了以下好处. 1.许多脚本语言都有动态特性,比如,你不需要用一个变量之前先声明它,你可以用一个变量存放完全不同类型的对象,你不需要做强制类型转换,因为转换都是自动的.现在Java语言也可以通过对脚本语言的支持

《Ruby程序员修炼之道》(第2版)目录—导读

版权 Ruby程序员修炼之道(第2版) • 著 [美] David A. Black 译 钟凤鸣 陈雪静 责任编辑 杨海玲 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 电子邮件 315@ptpress.com.cn 网址 http://www.ptpress.com.cn • 读者服务热线:(010)81055410 反盗版热线:(010)81055315 版权声明 Original English language edition, entitled The W

推荐 7 款最好的 Ruby on Rails 集成开发环境

Ruby 是个动态面向对象.通用的编程语言.它支持多种编程范式,包括面向功能和面向对象.同时它也包括一个动态类型系统和自动内存管理. 编辑器和集成开发环境(IDE)有些不同,编辑器是用来添加,编辑,查看文件内容的工具,而 IDE 则是一系列大致集中在一个共同任务的工具,比如 Ruby 开发,和所有包含这种形式的编辑器. 在这篇文章中,我们推荐了 7 款最佳的 Ruby on Rails IDEs 给所有的开发者.希望能帮助大家更好的完成开发任务.如果大家有什么其他的推荐,可以在评论里与大家共享哦

Ruby语言的缺点是什么?

问题描述 Ruby语言的优点:完全面向对象,语法要简单,解释语言,代码可读性强,号称"最接近自然语言的编程语言".Ruby语言的缺点是什么? 解决方案 细数Ruby语言优缺点解释以上这些究竟在做什么显得有些罗嗦了.但是我希望传递的是,使用 ruby这个语言时候的体会.尽管你不能自己亲自尝试,但是你可以通过屏幕看到这一系列的过程.现在我想展示另外一个例子.我希望你们可以所看到的内容中,得到一些体会.如果你之前还没有尝试过任何一种脚本语言,那么我鼓励你去学习ruby. 我认为ruby是非常

《Effective Ruby:改善Ruby程序的48条建议》一第2章 类、对象和模块

第2章 类.对象和模块面向对象程序设计(OOP)是Ruby的谋生之道.Ruby通常被认为是一门纯粹的面向对象语言,因为Ruby中的任何事物都是或者可以被转化为一个对象,我是说每个事物.Ruby的对象模型受到Smalltalk的严重影响,因此,如果你是由C++或Java转型而来的程序员,可能会觉得这和你曾使用过的其他语言有些不同.类也是对象这个事实足以让你的思维陷入无限递归模式.此外还有一些陷阱,如子类不会自动初始化其超类,以及定义变量和调用setter方法存在模糊的概念.本章将针对这些问题进行整