`

关于Ruby元编程

 
阅读更多

作者:孙志萌  浏览次数(20)  时间:2013-03-02 20:59:19
今天被问到此类问题,以前总是觉得这个是比较宽泛的一个概念,自己即使是用过这些特性,但却一直不知道这叫“元编程” 直到今天被人问起的时候,方才顿悟一些,随后便在网上和自己的平实用的一些元编程做个小总结。
原来所谓的Ruby中的元编程,是可以在运行时动态的操作语言结构(如类、模块、实例变量等)的技术。你甚至于可以在不用重启的情况下,在运行时直接键入一段新的Ruby代码,并执行他。
Ruby的元编程,也具有“利用代码来编写代码”的作用。例如,常见的attr_accessor等方法就是如此。

首先我能想到的自己用过的有这么几个:
1,respond_to?
2,define_method
3,instance_variable_get, instance_variable_set
4,eval 不过这个方法能尽量避免就避免,执行效率特别低!!
具体的意思想必一看方法名字 就知道这些方法的所要实现的逻辑。
具体可详见http://api.rubyonrails.org/ 上具体分析源码,很简单。

以下是我从其他地方搜索而来,以便以后的工作中有助于提高自己的编程技能;

1,内省,反射
在Ruby中,你完全有能力在运行时查看类或对象的信息。我们可以使用class、 instance_methods、  intance_variables等方法来达到目的。我们讲这种技术成为内省(Introspection)或者反射(Reflection)。
一说编写元程序的语言称之为元语言。被操纵的程序的语言称之为目标语言。一门编程语言同时也是自身的元语言的能力称之为反射或者自反。 ——摘自维基百科元编程条目

classRubyist
  defwhat_does_he_do
    @person='A Rubyist'
    'Ruby programming'
  end
end
  
an_object = Rubyist.new
puts an_object.class# => Rubyist
puts an_object.class.instance_methods(false)# => what_does_he_do
an_object.what_does_he_do
puts an_object.instance_variables# => @person



 respond_to?方法是反射机制中另一个有用的方法。使用respond_to?方法,可以提前知道对象是否能够处理你想要交与他执行的信息。所有的对象都有此方法,使用respond_to?方法,你可以确定对象是否能使用指定的方法。

2,instance_eval
  Object类提供了一个名为instance_eval的公开方法,该方法可被一个实例调用。他提供了操作对象的实例变量的途径。可以使用字符串向此方法传递参数或者传递一个代码块。

classRubyist
  def initialize
    @geek="Matz"
  end
end
obj = Rubyist.new

# instance_eval可以操纵obj的私有方法以及实例变量
 
obj.instance_eval do
  puts self# => #
  puts @geek# => Matz
end


 通过instance_eval传递的代码块使得你可以在对象内部操作。你可以在对象内部肆意操纵,不再会有任何数据是私有的!instance_eval亦可用于添加类方法。

classRubyist
end
  
Rubyist.instance_eval do
  defwho
    "Geek"
  end
end
  
puts Rubyist.who# => Geek


const_get, const_set
类似的,const_get和const_set用于操作常量。const_get返回指定常量的值:

puts Float.const_get(:MIN)# => 2.2250738585072e-308
const_set为指定的常量设置指定的值,并返回该对象。如果常量不存在,那么他会创建该常量,就是下面示范的那样:

classRubyist
end
puts Rubyist.const_set("PI",22.0/7.0)# => 3.14285714285714

  因为const_get返回常量的值,因此,你可以使用此方法获得一个类的名字并为这个类添加一个新的实例化对象的方法。这样使得我们有能力在运行时创建类并实例化其实例。

# Let us call our new class 'Rubyist'
# (we could have prompted the user for a class name)
class_name ="rubyist".capitalize
Object.const_set(class_name,Class.new)
# Let us create a method 'who'
# (we could have prompted the user for a method name)
class_name =Object.const_get(class_name)
puts class_name# => Rubyist
class_name.class_eval do
  define_method :who do |my_arg|
    my_arg
  end
end
obj = class_name.new
puts obj.who('Matz')# => Matz

分享到:
评论

相关推荐

    Ruby元编程第二版中文

    Ruby元编程是编程领域中一个深入且强大的主题,它允许程序员在运行时修改或创建代码,极大地提高了灵活性和代码的动态性。这本书“Ruby元编程第二版”专注于讲解Ruby语言的这一独特特性,旨在帮助开发者更好地理解和...

    ruby元编程.pdf

    ruby元编程.pdf ruby 元编程 这本书对ruby的调用原理做了非常精辟的分析。 ruby 元编程 这本书对ruby的元编程方式做了比较好的阐释。 ruby 元编程 这本书对结对编程有一个很好的提现。

    《Ruby元编程》PDF版本下载.txt

    根据提供的文件信息,本文将对《Ruby元编程》这一主题进行深入探讨,解析其核心概念、应用场景以及为何元编程在Ruby语言中具有重要的地位。 ### 一、Ruby元编程简介 #### 1.1 元编程定义 元编程是指编写能够生成或...

    Ruby元编程pdf

    Ruby元编程是编程的一种高级技巧,它允许程序员在运行时动态地修改或创建代码,极大地提高了灵活性和代码的可扩展性。Ruby作为一种动态类型语言,其元编程能力尤为强大,使得开发者可以创建出高度定制化的解决方案。...

    Ruby元编程-中文

    通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开列出发挥其优势的技巧和常用的Ruby设计模式。Ruby之父松本行弘作 序推荐。

    Ruby元编程中文版

    Ruby元编程中文版

    Ruby 元编程

    本书的第一部分“Ruby元编程”是本书的核心部分,他讲述了一个资深程序员在办公室一周发生的事情。 本书的第二部分“Rails中的元编程”是一个元编程实例,Rail是Ruby标志性框架。 在阅读本书之前,需要了解本书的三...

    Ruby元编程【英文版】

    ### Ruby元编程核心知识点概述 #### 一、元编程概念及意义 元编程是一种编程技术,它允许程序在运行时修改或生成其他程序的行为。在《Ruby元编程》这本书中,作者通过一系列案例来深入浅出地介绍了Ruby语言中独特...

    元编程 Ruby

    在Ruby这种动态编程语言中,元编程是一种核心技术,它不仅仅是一种技巧,更是Ruby和Rails框架中用于提高开发效率和软件复用性的关键方法。 在Ruby语言中,元编程主要通过方法拦截、动态方法定义、元类以及一些特殊...

    Ruby元编程 第2版 中文 佩罗塔著 2015.08

    ruby元编程 第2版 中文 目录清晰 方便广大通勤族路上看,如果喜欢请购买正版纸质图书

    Ruby元编程 源代码 Metaprogramming Ruby source code

    Ruby元编程是编程领域中的一个高级技术,它允许程序员在运行时操纵语言的结构和行为。这本《Metaprogramming Ruby》书籍深入探讨了如何利用Ruby的特性进行元编程,帮助开发者提升代码的灵活性、可扩展性和复用性。源...

    ruby元编程

    《Ruby元编程》以案例形式循序渐进地介绍了Ruby特有的实用编程技巧 元编程 通过分析案例 讲解例题 回顾Ruby代码库的实现细节 《Ruby元编程》作者Paolo Perrotta不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题...

    Metaprogramming Ruby 2nd Edition ruby元编程

    - **Kosmas Chatzimichalis**(软件工程师):本书不仅深入讲解了Ruby及其框架Ruby on Rails的核心机制,还提供了一系列宝贵的工具和技巧,帮助读者将Ruby编程水平提升到一个新的高度。 - **Arialdo Martini**...

    Ruby编程语言入门与实践 .pptx

    Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门...

    基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言.zip

    本资料包主要关注的是基于Ruby编程的基础知识和应用,包括如何使用Ruby进行开发和解决问题。 Ruby的设计哲学强调程序员的生产力和代码的可读性。它的语法直观,使得初学者能够快速上手。Ruby的核心特性包括: 1. ...

    Ruby元编程技术详解(Ruby Metaprogramming techniques)

    以下是一些关于Ruby元编程的关键知识点: 1. 单例类(Singleton Class): 在Ruby中,每个对象都有一个与之关联的单例类,这个类只包含该对象的实例方法。通过`class ; self; end`可以访问到对象的单例类,这对于...

    Ruby 元编程.pdf

    Ruby 元编程,不错的书,就是有点难懂

    Ruby元编程基础学习笔记整理

    ### Ruby元编程基础学习笔记整理 #### 一、语言构建(Language Constructs) 在Ruby中,诸如变量、类和方法等元素统称为语言构建(Language Constructs)。这些构建块是构成Ruby程序的基础。 ##### 示例代码分析 ```...

    Ruby编程,Ruby编程,

    ### Ruby编程语言简介 #### 一、Ruby编程语言概述 Ruby是一种动态的、面向对象的、通用型的编程语言,自1995年由日本程序员松本行弘(Yukihiro Matsumoto)创建以来,便以其简洁优雅的语法、高度可读性和易于学习...

Global site tag (gtag.js) - Google Analytics