我正在与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
调用可以正常工作: / p>
#!/usr/bin/env ruby
require './teke/ĝue.rb'
include Ĝue
def testi; puts 'testo!' ;end
testu
请注意,测试直接在main
范围内运行。我不知道这与使用专用的类范围是否有任何区别,我想不,就我所知,一切都是Ruby中的对象。
答案 0 :(得分:0)
通过In Ruby, how do I check if method "foo=()" is defined?
找到了可行的解决方案因此在这种情况下,可以通过以下方式进行检查
eval("defined? #{celo}") == 'method'