MST
星途 面试题库

面试题:Ruby元编程之DSL基础构建

在Ruby中,如何使用元编程的方式构建一个简单的领域特定语言(DSL)来描述一个人的基本信息,例如姓名、年龄、性别。假设DSL的语法类似于:person { name 'John'; age 30; gender'male' } ,请写出关键的代码实现思路及关键代码片段。
38.1万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
  1. 代码实现思路
    • 定义一个Person类,用于存储和表示人的基本信息。
    • 使用class_evalmodule_eval等元编程方法来动态定义方法,以解析DSL语法。
    • 在DSL块中,通过定义的方法来设置Person实例的属性。
  2. 关键代码片段
class Person
  attr_accessor :name, :age, :gender
  def initialize
    @name = nil
    @age = nil
    @gender = nil
  end
end

def person(&block)
  person = Person.new
  person.instance_eval(&block)
  person
end

Person.define_method(:name) do |value|
  @name = value
end

Person.define_method(:age) do |value|
  @age = value
end

Person.define_method(:gender) do |value|
  @gender = value
end

result = person do
  name 'John'
  age 30
  gender'male'
end
puts "Name: #{result.name}, Age: #{result.age}, Gender: #{result.gender}"