【发布时间】:2018-07-01 15:31:25
【问题描述】:
一些上下文
我正在玩 Ruby 来加深我的知识并获得乐趣,同时通过一个名为 Ĝue 的刚刚开始的玩具项目来提高我对世界语的了解。基本上,其目的是使用 Ruby 工具来实现一个符合我认为在编程语言上下文中有趣的世界语特征的 DSL。
实际问题
所以我想实现的第一个特征是动词的变形,在方法声明中使用不定式(以 -i 结尾),并在调用方法时使用jussive(以 -u 结尾)。
第一个工作的基本实现是这样的:
module Ĝue
def method_missing(igo, *args, &block)
case igo
when /u$/
celo = igo.to_s.sub(/u$/, 'i').to_s
send(celo)
else
super
end
end
end
而且它有效。现在下一步是让它更有弹性,因为当模块尝试调用它时,不能保证celo 会存在。也就是说,模块应该实现respond_to? 方法。因此问题是,模块如何知道需要模块的上下文是否包含相应的不定式方法?即使在模块开头添加了extend self,在使用以下代码进行测试时,模块内部methods.include? :testi 仍然返回false,尽管testu 调用完美:
#!/usr/bin/env ruby
require './teke/ĝue.rb'
include Ĝue
def testi; puts 'testo!' ;end
testu
请注意,测试直接在main 范围内运行。我不知道这与使用专用的类范围是否有任何区别,我猜不会,据我所知,一切都是 Ruby 中的对象。
【问题讨论】:
标签: ruby reflection dsl