文章分类 - ruby
摘要:元编程就是编写能为你编写代码的代码。但那不就是代码生成器所做的事情吗,就像是 rails gem,或者 yeoman?或者甚至是字节码编译器? 是的,但元编程一般指的是 Ruby 中的另外一些东西。ruby 中的元编程指的是能为你动态地编写代码的代码。是在运行时发生的。Ruby 是动态元编程的首要语
阅读全文
摘要:ruby中将块转变成对象的三种方法 ruby中的大部分东西都是对象,但是块不是。那么,如果你想存下来一个块,方便以后使用,你就需要一个对象。ruby中有三种方法,把块转换成可以利用的对象。 这三种很类似,如下: 输出 22Proc0 ruby中把Proc对象转变成块 说完了把块变成对象,那么怎么把对
阅读全文
摘要:Proc类Proc类就是能使块对象化的类 1proc.newhello = Proc.new do |name| puts "hello, #{name}"endhello.call("wanglei") 1 2 3 4 5以上代码结果为:hello, wanglei利用Proc.new方法,或者对
阅读全文
摘要:这是ruby的API文档中的解释:Proc objects are blocks of code that have been bound to a set of local variables. Once bound, the code may be called in different con
阅读全文
摘要:Ruby虽然是一个完全面向对象的语言,但是在它的发展过程中,也在不断的借鉴函数式编程的思想,来帮助改进语言的特性。其中最具代表性的就是block块,它就是Ruby世界中的匿名函数。那么为什么Ruby要不断的引入一些,函数式编程语言的特性呢,以及它都已经支持了哪些特性,本文就这一话题来聊一聊。 为何函
阅读全文
摘要:ruby中的方法是一个很神奇的概念,怎么个神奇法呢,听我慢慢道来。在介绍ruby的方法之前,我们先说下什么是静态语言,在编译阶段,编译器都会检查方法调用的对象是否有一个这样的方法,如果没有就直接报错,这种称为静态类型检查,这种语言称为静态语言。众所周知,ruby是动态语言,只有真正调用这个方法的时候
阅读全文
摘要:[b]如何动态的调用方法或对象的属性?1.动态创建方法:使用method_missing() 、send(:include,modeule_name)、define_method 。2.动态调用 obj.send(method_name,*args)。[/b] 作者:iteye_14327 来源:C
阅读全文
摘要:本文章发表在我的个人博客上http://xuyao.club/blog/2017/05/06/metaprogramming-ruby-of-monkeypatch/ 打开类 先看一个例子, 3.times do class Dog puts "wang..." end end => wang...
阅读全文
摘要:作为一个Ruby开发者,让人又爱又恨的便是元编程了。 【前言】元编程是什么 简单地说,元编程就是对语言本身的进行操作的一种编程手段,最常见的就是代码生成代码。对于Ruby这门语言而言,不会元编程,等于不会这门语言,因为这是它的核心能力与魅力。本文是基于阅读《Ruby元编程》后记录的一些自己的理解和看
阅读全文
摘要:Ruby是一门动态语言,动态创建与调用方法是其中一个体现。 动态方法 动态调用方法(动态派发) 动态调用方法,是指在代码中不通过硬编码而是在程序运行时自动去决定要调用的方法的一种行为。 示例代码1 class Student attr_accessor :name, :age, :birthday
阅读全文
摘要:define_method 动态定义方法,只需要提供一个方法名和充当方法主体的块。 在Myclass类里边动态添加了一个my_method的实例方法,同时得出结果6。 2.稍微复杂一点的栗子 这个栗子坐下来,貌似跟我想的有点不一样,我想要的结果是-->xiaoming say: 'I`m xiaom
阅读全文
摘要:何谓猴子补丁(Monkey Patch)?在动态语言中,不修改源代码而对功能进行追加和变更。 使用猴子补丁的目的: 1、追加功能 2、功能变更 3、修正程序错误 4、增加钩子,在执行某个方法的同时执行一些其他的处理,如打印日志,实现AOP等, 5、缓存,在计算量很大,结算之后的结果可以反复使用的情况
阅读全文
摘要:本文章发表在我的个人博客上 http://xuyao.club/blog/2017/05/06/metaprogramming-ruby-of-monkeypatch/ 打开类 先看一个例子, 3.times do class Dog puts "wang..." end end => wang..
阅读全文
摘要:1.遇到的问题 使用协程的时候看到网上的例子在程序开头都要加上 from gevent import monkey monkey.patch_all() 加上这句话以后就没有办法debug了 分析 猴子补丁是动态的修改代码,原来线程是阻塞运行,debug的时候可以一步一步调试,但是增加了from g
阅读全文
摘要:开篇 空即是色,色即是空。 空空色色,色色空空,在Ruby语言中,万物皆为对象。 Ruby是一个面向对象的语言(Object Oriented Language),面向对象的概念比其他语言要贯彻的坚定很多。 Ruby中不存在Java中原始类型数据和对象类型数据之分。大部分Ruby中的的东东都是对象。
阅读全文