在IRB启动时,我加载了很多自定义文件,模块和类来增强它。
我有一个课程可以帮助我很多,但我不知道如何自动调用它。在这种情况下自动意味着:当我启动IRB时,当我输入不是方法或变量的东西时,我想调用我自己选择的自定义方法。
我松散地知道这可以通过rescue
或method_missing
完成,但我不确定要做哪一个。如果我输入IRB不知道的方法,如“foo”,有人可以告诉我如何在IRB(或irbrc)中调用方法吗?
答案 0 :(得分:2)
我会选择不同的方法:
include
此模块foo.rb:
module Foo
def my_method
puts "aye"
end
end
class Object
include Foo
end
现在,只要您在irb中输入my_method
,它就会调用您的方法。
答案 1 :(得分:1)
这似乎很快会让人讨厌,但这就是你如何做到的。将其添加到您的.irbrc
:
def self.method_missing (name, *args, &block)
puts "#{name} is not a method, ya goof"
end
显然,更改方法定义的内容以更改捕获缺失方法时会发生的情况。
现在每当你在irb中的main
对象上调用一个方法时,它就会捕获丢失的方法。
>> foo
foo is not a method, ya goof
=> nil
这仅适用于顶级方法调用。如果您想要捕获每个缺少的方法调用,请改为添加:
class Object
def method_missing (name, *args, &block)
puts "#{self.class}##{name} is not a method, ya goof"
end
end
请记住,这将向您揭示许多您可能甚至不知道的失败的方法调用。
$ irb
String#to_int is not a method, ya goof
>> foo
NilClass#to_ary is not a method, ya goof
Object#foo is not a method, ya goof
=> nil
>> [].bar
Array#bar is not a method, ya goof
=> nil
从长远来看,我认为这不会是你想要的东西,但这是怎么做的。自己敲门!