科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道跨越边界: 活动记录和 Java 编程中特定于域的语言

跨越边界: 活动记录和 Java 编程中特定于域的语言

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在这篇文章中,将学习 Ruby 提供的一些漂亮方式,可以集成干净的 DSL,让您大开眼界,用一种新的参考框架来审视 Java 的选项。

作者:baggio785 来源:CSDN 2008年2月29日

关键字: java 活动记录

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共5页)

Ruby 中的词汇表

Ruby 语法开放的结构和符号的包含,使得定义词汇相当容易。可以使用方法、符号和类来形成词汇。请输入 irb 来启动 Ruby 解释器。输入清单 1 中的代码。(清单 1 显示了输入的内容和 Ruby 中的结果。只需要输入黑体的代码。)

清单 1. 创建 Ruby 类


irb(main):001:0> class Person
irb(main):002:1> attr_accessor :name, :email
irb(main):003:1> end
=> nil
irb(main):004:0> person = Person.new
=> #<Person:0x2b61a80>
irb(main):005:0> person.name = "Elvis"
=> "Elvis"
irb(main):006:0>

在清单 1 中,创建了叫作 Person 的类,它有两个实例变量分别叫作 nameemail。请特别注意 attr_accessor :name, :email 这一行。有两个概念应当引起注意:

  • 类定义中的方法调用
  • 符号的使用

方法调用

清单 1 中的 attr_accessor :name, :email 语句创建两个属性,分别带有 getter 和 setter 存取器。attr 实际上是个方法调用 —— 是 Ruby 语言本身元编程的精彩示例。Java 开发人员习惯于在类体中看到方法声明,而不习惯看到方法调用。这个方法调用把方法和实例变量添加到 Person 类中。

如果没有 attr_accessor :name, :email,就必须为每个需要的属性输入清单 2 的代码:


清单 2. Ruby 存取器


def name=(value)
 @name = value
end

def name
 return @name
end

清单 2 —— Ruby 版的 getter 和 setter —— 看起来应当有点儿熟悉。name= 实际上是个方法名称,而 @ 加在所有实例变量前作为前缀,但剩下的就与 Java 的 getter 和 setter 很类似了。

如果不用清单 2 中的代码,也可以用 @attr 的另一个版本来创建带有 getter、setter 或两者都有的属性。

符号

第二个值得注意的概念是符号。可以把 :email 当成名为 email 的东西。Ruby 符号像字符串,但是是不可修改的字符串,而且只有一个实例。只能使用一个 :email 符号。

现在看起来像下面这样的活动记录代码应当让您有点儿感觉了:


class Manager < ActiveRecord::Base
 has_one :department
end

has_one 是个方法,:department 是个符号,活动记录只是把它解释成类的名称。因为 Ruby 并不强制要求在方法参数两边使用括号,还因为 Rails 可以使用专门为活动记录设计的符号和方法名称,所以这个词汇畅通无阻。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章