加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:27:34 所属栏目:百科 来源:网络整理
导读:我目前正在尝试使用 Ruby和Rails,我在关于元编程的教程和书籍中有几个部分.许多人提到它是Ruby的重要组成部分,但它们并没有真正详细说明.这就好像元编程是Ruby程序员的最后边界.来自.NET背景我很难理解它为什么如此有用. 使用元编程有什么好处? 什么是特征
我目前正在尝试使用 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

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

没有.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读