Can you 'require' ruby file in irb session, automatically, on every command?

给你一囗甜甜゛ 提交于 2019-11-30 23:39:13

问题


I am currently editing a file, and I'm using irb to test the api:

> require './file.rb'
> o = Object.new
> o.method

I then want to be able to edit the file.rb, and be able to see changes immediately. Example: assume new_method did not exist when I first required file.rb:

> o.new_method

Which will return an error. Is there a sandbox/developer mode or a method whereby I can achieve the above without having to reload the file every time? Require will not work after the first require, regardless. I assume worst case I'd have to use load instead.


回答1:


I usually create a simple function like this:

def reload
    load 'myscript.rb'
    # Load any other necessary files here ...
end

With that, a simple reload will re-import all of the scripts that I'm working on. It's not automatic, but it's the closest thing that I've been able to come up with.

You may be able to override method_missing to call this function automatically when your object is invoked with a method that doesn't exist. I've never tried it myself, though, so I can't give any specific advice. It also wouldn't help if you're calling a method that already exists but has simply been modified.

In my own laziness, I've gone as far as mapping one of the programmable buttons on my mouse to the key sequence "reload<enter>". When I'm using irb, all it takes is the twitch of a pinky finger to reload everything. Consequently when I'm not using irb, I end up with the string "reload" inserted in documents unintentionally (but that's a different problem entirely).




回答2:


This won't run every command, but you can include a file on every IRb session. ~/.irbrc is loaded each time you start an IRb session.

~/.irbrc

require "~/somefile.rb"

~/somefile.rb

puts "somefile loaded"

terminal

> irb
somefile loaded
irb(main):001:0> 

~/.irbrc is loaded each time you start an irb session




回答3:


What about require_dependency from ActiveSupport library?

require 'active_support/dependencies' #load it at the beginning
require_dependency 'myscript.rb'

Then require_dependency should track the changes in myscript file and reload it.



来源:https://stackoverflow.com/questions/11020949/can-you-require-ruby-file-in-irb-session-automatically-on-every-command

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!