Ruby - how to reload a file with changes in IRB or PRY?

Mic*_*ant 3 ruby irb pry

I go into irb and require a file

irb> require_relative 'prime'
irb> true
Run Code Online (Sandbox Code Playgroud)

该文件包含以下代码:

def is_prime? num
  (2..num-1).each do |div_by|
    if num % div_by == 0
      return false
    end 
  end 
  true
end
Run Code Online (Sandbox Code Playgroud)

在irb中需要文件,我可以使用该方法,例如

irb> require_relative 'prime'
irb> is_prime? 10
irb> -> false

irb> is_prime? 11
irb> -> true
Run Code Online (Sandbox Code Playgroud)

但是,如果我修改源文件,请说add puts 'HHH',除非退出控制台并重新输入然后再require显示文件,否则它不会显示

如果我留在控制台中并再次要求该文件,我将得到错误的消息,因为该文件已被加载,并且无法获得新的更改

我试过了

irb> reload
Run Code Online (Sandbox Code Playgroud)

irb> reload!
Run Code Online (Sandbox Code Playgroud)

但他们给我

NoMethodError (undefined method `reload!' for main:Object)
Run Code Online (Sandbox Code Playgroud)

我也尝试过

irb> load 'prime.rb'
irb> => true
Run Code Online (Sandbox Code Playgroud)

但没有拿起零钱

使用PRY得出相似的结果

Mar*_*sky 5

尝试Kernel#load使用rb文件的相对路径:

irb> load './path/to/prime.rb'
Run Code Online (Sandbox Code Playgroud)

Kernel#require仅一次加载源文件,而Kernel#load每次调用时均加载一次。

引用/sf/answers/324347481/

  • @MichaelDurrant`load'prime.rb'`似乎没有作用的原因是ruby具有一个标准的lib类,名称为[`Prime`](https://ruby-doc.org/stdlib-2.6。 3 / libdoc / prime / rdoc / Prime.html),因此您实际上是在加载此文件,而不是`prime.rb`文件。 (3认同)
  • @engineersmnky没有任何帮助。 (2认同)