Ruby元编程的一些值得注意的地方

 更新时间:2015年08月03日 16:35:02   投稿:goldensun  
这篇文章主要介绍了Ruby元编程的一些值得注意的地方,作者自己用实际代码给出了相关示例,需要的朋友可以参考下

  避免无限循环的元编程。

    写一个函数库时不要使核心类混乱(不要使用 monkey patch)。

    代码块形式最好用于字符串插值形式。
        当你使用字符串插值形式,总是提供 __FILE__ 和 __LINE__,使得你的回溯有意义。

 class_eval 'def use_relative_model_naming?; true; end', __FILE__, __LINE__

        define_method 最好用 class_eval{ def ... }

    当使用 class_eval (或者其他的 eval)以及字符串插值,添加一个注释块使之在插入的时候显示(这是我从 rails 代码学来的实践):

 # from activesupport/lib/active_support/core_ext/string/output_safety.rb
 UNSAFE_STRING_METHODS.each do |unsafe_method|
  if 'String'.respond_to?(unsafe_method)
  class_eval <<-EOT, __FILE__, __LINE__ + 1
   def #{unsafe_method}(*args, &block)  # def capitalize(*args, &block)
   to_str.#{unsafe_method}(*args, &block) # to_str.capitalize(*args, &block)
   end          # end

   def #{unsafe_method}!(*args)    # def capitalize!(*args)
   @dirty = true       # @dirty = true
   super         # super
   end          # end
  EOT
  end
 end

    避免在元编程中使用 method_missing,它使得回溯变得很麻烦,这个习惯不被列在 #methods,拼写错误的方法可能也在默默的工作,例如 nukes.launch_state = false。考虑使用委托,代理或者是 define_method ,如果必须这样,使用 method_missing ,
        确保 也定义了 respond_to_missing?
        仅捕捉字首定义良好的方法,像是 find_by_* ― 让你的代码越肯定(assertive)越好。
        在语句的最后调用 super
        delegate 到确定的、非魔法方法中:

 # bad
 def method_missing?(meth, *args, &block)
  if /^find_by_(?<prop>.*)/ =~ meth
  # ... lots of code to do a find_by
  else
  super
  end
 end

 # good
 def method_missing?(meth, *args, &block)
  if /^find_by_(?<prop>.*)/ =~ meth
  find_by(prop, *args, &block)
  else
  super
  end
 end

 # best of all, though, would to define_method as each findable attribute is declared


相关文章

  • 简单对比分析Ruby on Rails 和 Laravel

    简单对比分析Ruby on Rails 和 Laravel

    web应用程序开发中两个相对而言更加流行的框架是 Ruby on Rails 和 Laravel. 它们两个都是非常成熟的项目,已经面世相当长一段时间了 .
    2014-07-07
  • ruby声明式语法的实现例子

    ruby声明式语法的实现例子

    这篇文章主要介绍了ruby声明式语法的实现例子,声明式编程是一种编程范型,与命令式编程相对立,需要的朋友可以参考下
    2014-11-11
  • CentOS7下搭建ruby on rails开发环境

    CentOS7下搭建ruby on rails开发环境

    听说rails是一个比较流行的快速开发框架,对于我这个web不熟悉的人来说,那是极好的!可以快速上手,又能真正了解服务器端的各种,所以rails搞起来。不过一个完整的开发环境搭建过程完成后,真的只能用各种坑来形容~
    2016-02-02
  • Ruby on Rails实现最基本的用户注册和登录功能的教程

    Ruby on Rails实现最基本的用户注册和登录功能的教程

    这里我们主要以has_secure_password的用户密码验证功能为中心,来讲解Ruby on Rails实现最基本的用户注册和登录功能的教程,需要的朋友可以参考下
    2016-06-06
  • 淘宝网提供的国内RubyGems镜像简介和使用方法

    淘宝网提供的国内RubyGems镜像简介和使用方法

    由于国内的网络环境,导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败,因此使用gem或bundle时常常会遇到长久无响应的情况
    2014-04-04
  • 在Ruby中创建和使用哈希的教程

    在Ruby中创建和使用哈希的教程

    这篇文章主要介绍了在Ruby中创建和使用哈希的教程,罗列了Ruby中各种使用哈希的方法,需要的朋友可以参考下
    2015-04-04
  • Ruby和元编程之万物皆为对象

    Ruby和元编程之万物皆为对象

    这篇文章主要介绍了Ruby和元编程之万物皆为对象,想要掌握Ruby和Ruby的元编程,对象就是第一门必修功课,需要的朋友可以参考下
    2014-10-10
  • ruby的程序结构介绍

    ruby的程序结构介绍

    这篇文章主要介绍了ruby的程序结构介绍,本文讲解了源文件、模块、控制结构、方法定义、类及对象等内容,需要的朋友可以参考下
    2015-05-05
  • Windows下Ruby on Rails开发环境安装配置图文教程

    Windows下Ruby on Rails开发环境安装配置图文教程

    这篇文章主要介绍了Windows下Ruby on Rails开发环境安装配置图文教程,ROR初学者必看,需要的朋友可以参考下
    2014-07-07
  • Ruby的面向对象方式编程学习杂记

    Ruby的面向对象方式编程学习杂记

    Ruby是具有面向对象特性的编程语言,这里整理了一些Ruby的面向对象方式编程学习杂记,包括类与方法等基本的面向对象要素的知识,需要的朋友可以参考下
    2016-05-05

最新评论