Ruby学习之元编程】的更多相关文章

Kernel#evel()方法 和Object#instance_evel().Module#class_evel()方法类似,evel()方法也是一个内核方法,Object#instance_evel()方法可以使调用对象为self,当前类为#self(当前对象的eigenclass),并且传递一个代码块访问self:Module#class_evel()方法则可以使调用者成为当前类,并在当前类中执行传入的块(self此时是一个class的实例对象),从而修改当前类的方法和属性.Kernel#…
ruby是完全面向对象的,所有的数据都是对象,没有独立在类外的方法,所有的方法都在类中定义的. 一.类的定义语法 类的定义以 class 关键字开头,后面跟类名,以 end标识符结尾. 类中的方法以 def关键字开头,后面跟方法名及参数列表(如果有的话),以 end标识符结尾. 类也有构造函数,名字必须为initialize. 对象通过new来创建,new是类的方法. 举例如下: class Demo def initialize puts "begin create object"…
前言 ES6已经出来好久了,但是工作中比较常用的只有let const声明,通过箭头函数改this指向,使用promise + async 解决异步编程,还有些数据类型方法...所以单独写一篇文章学习ES6中的proxy 和 reflect.本文属于学习笔记,可能会有错误的理解,欢迎交流指正. 基本概念 什么是元编程?这是我在网上搜到的一句话.大家可以参考理解.我的简单理解就是>改源码底层的东西,对原本的功能进行了更改. 能"介入"的对象底层操作进行的过程中,并加以影响.元编程中…
目录 目录 前言 代码详解 数据的结构 数据的操作 分割向量 合并向量 寻找最大值 排序 总结 前言 模板在C++一直是比较神秘的存在.STL和Boost中都有大量运用模板,但是对于普通的程序员来说,模板仅限于使用.在一般的编程中,很少会有需要自己定义模板的情况.但是作为一个有理想的程序员,模板是一个绕不过去的坎.由于C++标准的不断改进,模板的能力越来越强,使用范围也越来越广. 在C++11中,模板增加了constexpr,可变模板参数,回返类型后置的函数声明扩展了模板的能力:增加了外部模板加…
Find The Find module supports the top-down traversal of a set of file paths.(一系列文件的路径的遍历) find(*paths, ignore_error: true) prune() require 'find' IGNORE = [/^\./, /^\.svn$/, /^\.git$/] def listdir(top)   Find.find(top) do |path|     if FileTest.direc…
第4章代码块blocks 基础知识 作用域:用代码块携带variables through scopes 通过传递block给instance_eval方法来控制作用域. 把block转换为Proc,lambda这样的可反复调用的对象.4.5 4.12基础 def a_method(a,b)   a + yield(a,b) end p a_method(2,1){|x, y| x * y}  #=>4 4.3代码块是闭包Closures 定义一个块时,它会获取当前环境中的绑定bingding,…
<Ruby元编程> 第二章 对象模型 类定义揭秘inside class definitions: class关键字更像一个作用域操作符,核心作用是可以在里面随时定义方法. [].methods.grep(/^re/):调用 出Array的所有以re开头的method. Monkeypatch:涉及全局修改,定义某个方法前应该仔细检查该类是否已有同名的方法. 实例对象存放在对象中,方法存放在类中. 类的真相:类本身也是对象.Ruby允许在运行时修改类的信息. Class.instance_me…
上个星期测试道的Monkey老师和我聊到测试用例参数过多的问题,其实这样的问题在我这里也同样经历过.比如我的测试用例必须面对不同的测试环境,每个环境有无数的参数,开发的最初阶段,因为参数少,所以就放在执行的命令行里,随着测试用例的不断增长,参数从4-5个增长到30多个,而且每个用例使用的参数也不完全相同,有使用ABCD的,有使用ADHJ的.另外有些参数想传一个数组进去,用命令行参数的方法就很难处理. 经过考虑,果断的使用配置文件来解决问题.选择配置文件当时有两个方案,一个是直接写成Ruby代码,…
前几天看了Google Testing Blog上的一篇文章讲到C++因为没有反射机制,所以如何注册测试用例就成了一件需要各显神通的事情.从我的经验来看,无论是Google的GTest还是微软的LTM,都是通过宏来解决问题.但是对于Ruby之流的动态语言,这种事情太小菜一叠了.请看以下代码例子: class Test def test_001 puts 'test_001' end def test_002 puts 'test_002' end end t = Test.new test_me…
元编程不过是编程--经典必读 作用域(绑定) 打破作用域门的方式 对象模型图 七条规则 法术手册 作用域(绑定) 改变作用域的关键字, 分别是module,class和def.我们称为作用域的门(scope gate) instance_eval以实例作用域执行代码 class_eval以类定义作用域执行代码 Kernel#eval方法,当前上下文中直接执行代码字符串 instance_eval class_eval 对象 单例方法 -- 类名(元类对象) 类方法 实例方法 表格是不精准.不完备…