ruby-on-rails – 为什么学习Ruby中的元编程和特征类很重要?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 为什么学习Ruby中的元编程和特征类很重要?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在尝试使用 Ruby和Rails,我在关于元编程的教程和书籍中有几个部分.许多人提到它是Ruby的重要组成部分,但它们并没有真正详细说明.这就好像元编程是Ruby程序员的最后边界.来自.NET背景我很难理解它为什么如此有用.

>使用元编程有什么好处?
>什么是特征类,它与单例有什么不同?
>在什么情况下使用元编程常见?
>使用代码修改其他代码的行为有什么道德含义,特别是不属于您自己的代码

解决方法

>使用元编程有什么好处?

您可以创建比没有它更具表现力的API(例如,ActiveRecord使用元编程来根据表的列名定义访问器方法,因此您可以编写像person.age之类的东西而不是像person.read_attribute(“age”)这样的东西,其中person是一个活动的记录对象,人员表有一个名为age的列,你可以用比你原来少得多的代码完成一些事情.
>什么是特征类,它与单例有什么不同?

术语“本征类”和“单一类”在ruby的上下文中可互换使用.
>在什么情况下使用元编程常见?

在您需要大量锅炉板代码或创建DSL的情况下.

用例1的示例:

而不是写这样的锅炉板代码

class Foo
  def bar
    @bar
  end

  def bar=(b)
    @bar = b
  end

  def baz
    @baz
  end

  def baz=(b)
    @baz = b
  end
end

您可以使用元编程方法attr_accessor编写这么短的代码,它会根据您给出的参数自动定义具有名称的getter和setter方法

class Foo
  attr_accessor :foo,:bar
end

如果attr_accessor在标准库中不存在,你可以像这样自己定义它(让你知道ruby中的元编程是什么样的):

class Module
  def attr_accessor(*variable_names)
    variable_names.each do |variable_name|
      define_method( variable_name ) do
        instance_variable_get( "@#{ variable_name }" )
      end

      define_method( "#{ variable_name }=" ) do |value|
        instance_variable_set( "@#{ variable_name }",value)
      end
    end
  end

结束
>使用代码修改其他代码的行为有什么道德含义,特别是不属于您自己的代码

没有.

猜你在找的Ruby相关文章