• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > ruby声明式语法的实现例子

ruby声明式语法的实现例子

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了ruby 基础语法下载,ruby 语法,ruby,ruby碧玺,ruby woo口红等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在ActiveRecord可以用很方便的声明方式来定义model之间的关联关系,例如:

class Topic < ActiveRecord::Base
  has_many :posts
  belongs_to :user
end
</div>

has_many和belongs_to其实是Topic类的class method,标准写法是:

class Topic < ActiveRecord::Base
  Topic.has_many(:posts)
  Topic.belongs_to(:user)
end
</div>

那么has_many可以给我们带来什么呢?类方法has_many在被执行的时候,给Topic的对象实例添加了一系列方法:posts, posts<<, orders.push......等等。所以当我们在model里面声明has_many,belongs_to等对象关系的时候,一系列相关的对象方法就被自动添加进来了。 让我们来自己试试看吧:

module M
  def self.included(c)
    c.extend(G)
  end
  module G
    def generate_method(*args)
      args.each do |method_name|
        define_method(method_name) { puts method_name }
      end
    end
end
end

class C
  include M
  generate_method :method1, :method2
end

c = C.new
c.method1
c.method2
</div>

我们定义了一个声明generate_method,可以接受多个symbol,来动态的创建同名的方法。现在我们在类C里面使用这个声明:generate_method :method1, :method2,当然我们需要include模块M。为什么ActiveRecord的model不需要include相关的模块呢?当然是因为Topic的父类ActiveRecord::Base已经include了模块Associations了。

类C通过include模块M,调用了模块M的一个included回调接口,让类C去extend模块G,换句话来说就是,通过include模块M,来给类C动态添加一个类方法generate_method。

这个generate_method被定义在模块G当中,它接受一系列参数,来动态创建相关的方法。于是我们就实现了这样的DSL功能:

通过在类C里面声明generate_method :method1, :method2,让类C动态的添加了两个实例方法method1,method2,是不是很有意思? 实际上rails的对象关联声明也是以同样的方式实现的。

</div>

您可能想查找下面的文章:

  • ruby声明式语法的实现例子
  • Ruby的语法和语言特性总结
  • Ruby语法笔记
  • Ruby编程中的语法使用风格推荐
  • Ruby中使用正则表达式的基础指引
  • Ruby中关于模块的一些基础知识
  • Ruby中一些基本语法知识点的罗列汇总
  • Ruby基础知识之类
  • Ruby基础知识之方法、代码段
  • Ruby基础知识之基本流程控制

相关文章

  • 快速正确的安装 Ruby, Rails 运行环境
  • Ruby实现的3种快速排序算法
  • Ruby元编程小结
  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境
  • 举例讲解Ruby中require的使用方法
  • ruby和pig处理流式文件实例
  • Ruby升级后no such file to load -- readline解决办法
  • Ruby中的循环语句的用法教程
  • 浅析Ruby中的正则表达式的使用
  • 在Ruby中利用Net::SMTP类发送电子邮件的教程

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 编写Ruby代码注释时需要注意的一些问题
    • Ruby中的循环语句的用法教程
    • Python的Flask框架中SERVER_NAME域名项的配置教程
    • Ruby中对一元操作符重载实例
    • 举例理解Ruby on Rails的页面缓存机制
    • 深入理解Ruby中的block概念
    • Rails应用程序中同时修改操作冲突问题的解决方案
    • Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例
    • Ruby简明教程之判断语句介绍
    • Ruby中处理时间的一些基本操作

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有