浅析Ruby中的DATA对象
这段代码能运行吗? 这个DATA是什么东西?
require 'erb'
data = DATA.read
max = 15_000
title = "hello world!"
content = "hello world!\n" * 10
max.times{
ERB.new(data).result(binding)
}
__END__
<html>
<head> <%= title %> </head>
<body>
<h1> <%= title %> </h1>
<p>
<%= content %>
</p>
</body>
</html>
这个神奇的DATA是一个IO对象,读取__END__
之后内容。 有一点需要注意的是DATA.read
会将__END__
之后的内容一次性读出,由于IO读取的特性,当第 二次DATA.read
的时候内容就会为空,如果需要第二次读取,那么先要执行DATA.rewind
。
有的时候我们写一个脚本来做一些自动化的工作,需要预先读取一个文件的内容,作为输入或者作为模版,我们可以先把这部分内容附到__END__
后,然后用DATA
来读取,因为它是标准的IO对象,我们可以像处理普通文件一样处理__END__
后的内容,如上面的代码所示,用来存储ERB
内容作为模版,然后再进行处理,非常的方便。
相关推荐
-
Ruby包管理器gem常用命令
gem相关命令使用 1.显示gem的帮助和版本 复制代码 代码如下: gem –h/--help #显示gem的帮助 gem –v /--version #显示gem的版本号 2. 列出远程库的所有可用软件 复制代码 代码如下: gem query --remote # 短命令: gem q -r 你可以看到一个关于远程主机上所有软件的详细列表. 3. 查找远程主机上的特定软件 复制代码 代码如下: gem query --remote --name-matches doom #
-
深入理解Ruby中的block概念
Ruby 里的 block一般翻译成代码块,block 刚开始看上去有点奇怪,因为很多语言里面没有这样的东西.事实上它还不错. First-class function and Higher-order function First-class function 和 Higher-order function 是函数式编程语言里面的概念,听起来好像很高端的样子,其实很很简单的. First-class functions 是指在某些语言里,函数是一等公民,可以把函数当做参数传递, 可以返回一个函
-
Ruby类实例变量、类实例方法和类变量、类方法的区别
在Ruby中类实例变量.类实例方法和类变量.类方法的区别比较微妙,而且用法也有相当的区别.本文探讨一下他们的定义和基本的使用场景,以抛砖引玉... 一.类实例变量和类变量 类变量大家都很熟悉了,就是在类定义中用@@开头的变量.类变量是用于存储类的全局信息,它只属于类,不同与类实例变量(即用@开头定义的变量)每一个类的对象都有一份数据. 类变量是可以被继承的,也就是说如果我们派生一个子类,那么在子类中是可以访问父类的类变量的.子类和父类共享一份数据,对一个类的修改会反映到另一个类中.如下边
-
浅析Ruby中的DATA对象
这段代码能运行吗? 这个DATA是什么东西? require 'erb' data = DATA.read max = 15_000 title = "hello world!" content = "hello world!\n" * 10 max.times{ ERB.new(data).result(binding) } __END__ <html> <head> <%= title %> </head> <
-
浅析Ruby中的类对象的概念
面向对象的程序涉及类和对象. 一个类是蓝本,从个别对象被创建.在面向对象的术语,我们说小明的自行车是被称为自行车类的对象实例. 任何车辆的例子.它包括轮子,马力,燃油或燃气罐容量.这些特点形成的类车辆的数据成员.可以从其他车辆区分这些特征. 车辆也有一定的功能,如停止,驾驶,超速驾驶.即使这些功能形成的类车辆的数据成员.因此,可以定义一个类作为一个组合的特点和功能. 车辆类可以被定义为: Class Vehicle { Number no_of_wheels Number horsepower
-
浅析Python 中整型对象存储的位置
在 Python 整型对象所存储的位置是不同的, 有一些是一直存储在某个存储里面, 而其它的, 则在使用时开辟出空间. 说这句话的理由, 可以看看如下代码: a = 5 b = 5 a is b # True a = 500 b = 500 a is b # False 由上面的代码可知, 整型 5 是一直存在的, 而整型 500 不是一直存在的. 那么有哪些整数是一直存储的呢? a, b, c = 0, 0, 0 while a is b: i += 1 a, b = int(str(i)),
-
Ruby中的String对象学习笔记
1.String对象定义 String对象的定义可以使用""和'',对于单纯的字符串,推荐使用''进行定义,效率比""高,""与''的区别在于,''内的字符串定义后就是最终形态,即使如\n换行符,也会原样输出,而""更像是一个表达式,解析器会针对其中的特殊字符进行处理,然后才会输出,如下示例代码: 复制代码 代码如下: i = 100 s1 = 'The value of i variable is #{i}!\n' #Th
-
深入浅析JavaScript中的arguments对象(强力推荐)
1.在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性.arguments非常类似Array,但实际上又不是一个Array实例.可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用arguments是不必要写成funcArg.arguments,直接写arguments即可). Array.prototype.testArg = "test"; function funcArg() { alert(funcArg.arg
-
深入浅析JavaScript中的RegExp对象
JS中的正则对象 概述 正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用作按照"给定模式"匹配文本的工具.比如,正则表达式给出一个 Email 地址的模式,然后用它来确定一个字符串是否为 Email 地址. JavaScript 的正则表达式体系是参照 Perl 5 建立的. 新建正则表达式有两种方法.一种是使用字面量,以斜杠表示开始和结束. var regex = /xyz/; 另一种是使用 RegExp 构造函数
-
浅析Ruby中继承和消息的相关知识
继承允许你创建一个类,作为另一个类的精炼(refinement)和特化(specialization).例如,在我们的自动点唱机系统中,有"歌曲"这一概念,被封装在Song类中,然后,随着市场的成长,我们需要提供卡拉OK的支持.一首卡拉OK歌曲和其他歌曲没什么两样(它只是没有主唱的音轨,对此我们不必关心).不过,它还包括对于的一套歌词以及时间信息.当我们的自动点唱机在播放一首卡拉OK歌曲时,歌词应该随音乐滚动显示在点唱机前的屏幕上. 解决这个问题的一种方法是定义一个新的类Karaoke
-
浅析Ruby中的Profiling工具的用法
内置的profiler实现的很简单,在ruby2.2中只有150行代码,大家可以看看它的实现profile.rb .内置的profiler使用起来非常的方便,只需要加上-rprofile参数即可.例如: 执行: ruby -rprofile test.rb 输出结果为: 通过打印出的结果能够很明显的看出耗时的方法.内置的profiler很简单,只能打印出这样的结果,没有 其他输出格式的选项,下面介绍的其他几种都有丰富的格式输出. ruby-prof repo: https://github.co
-
Ruby中的Range对象学习笔记
Range是范围对象的类,定义的时候可以使用范围操作符".."或者"...",".."生成的范围对象包括起点和终点,"..."生成的范围对象不包括起点和终点,范围是由是一序列有顺序.有规律的元素对象组成,任何有顺序,有规律的一组对象,都可以用Range对象来定义,如数字.字母.字符串.甚至时间 1.Range对象的定义 复制代码 代码如下: r1=1..5 #定义范围对象r1,包括元素1,2,3,4,5 r2=Rang
-
浅析Ruby中的正则表达式的使用
如果只是需要中查找字符串的 text, 不要使用正则表达式:string['text'] 针对简单的结构, 你可以直接使用string[/RE/]的方式来查询. match = string[/regexp/] # get content of matched regexp first_group = string[/text(grp)/, 1] # get content of captured group string[/text (grp)/, 1] = 'replace' # strin
随机推荐
- 详解springboot-修改内置tomcat版本
- 详解tween.js的使用教程
- Java版C语言版简单使用静态语言实现动态数组的方法
- Java简单实现SpringMVC+MyBatis分页插件
- 详解Java单元测试Junit框架实例
- java教程之java继承示例详解
- JS触摸事件、手势事件详解
- PHP遍历XML文档所有节点的方法
- 使用PHP如何实现高效安全的ftp服务器(一)
- Php连接及读取和写入mysql数据库的常用代码
- Android动态添加menu菜单的简单方法
- 自动检查并替换文本框内的字符
- Nginx批量添加二级子域名完美方案
- Android UI控件Switch的使用方法
- .net使用Aspose.Words进行Word替换操作的实现代码
- Android之ImageSwitcher的实例详解
- 基于Python中capitalize()与title()的区别详解
- 微信小程序实现传参数的几种方法示例
- 微信小程序实现的3d轮播图效果示例【基于swiper组件】
- CentOS 7.6安装MySQL 5.7 GA版的教程图解