require 'Time' 后有很多警告

A lot of warnings after require 'Time'

当我导入 Time 和 HTTParty 时,我收到了这些警告:

C:/Ruby27-x64/lib/ruby/2.7.0/time.rb:34: warning: already initialized constant Class::ZoneOffset
C:/Ruby27-x64/lib/ruby/2.7.0/Time.rb:34: warning: previous definition of ZoneOffset was here
C:/Ruby27-x64/lib/ruby/2.7.0/time.rb:137: warning: already initialized constant Class::LeapYearMonthDays
C:/Ruby27-x64/lib/ruby/2.7.0/Time.rb:137: warning: previous definition of LeapYearMonthDays was here
C:/Ruby27-x64/lib/ruby/2.7.0/time.rb:138: warning: already initialized constant Class::CommonYearMonthDays
C:/Ruby27-x64/lib/ruby/2.7.0/Time.rb:138: warning: previous definition of CommonYearMonthDays was here
C:/Ruby27-x64/lib/ruby/2.7.0/time.rb:475: warning: already initialized constant Class::MonthValue
C:/Ruby27-x64/lib/ruby/2.7.0/Time.rb:475: warning: previous definition of MonthValue was here
C:/Ruby27-x64/lib/ruby/2.7.0/time.rb:677: warning: already initialized constant Time::RFC2822_DAY_NAME
C:/Ruby27-x64/lib/ruby/2.7.0/Time.rb:677: warning: previous definition of RFC2822_DAY_NAME was here
C:/Ruby27-x64/lib/ruby/2.7.0/time.rb:681: warning: already initialized constant Time::RFC2822_MONTH_NAME
C:/Ruby27-x64/lib/ruby/2.7.0/Time.rb:681: warning: previous definition of RFC2822_MONTH_NAME was here

这就是所有代码:

require 'HTTParty'
require 'Time'

有人知道我如何解决这个问题吗?

Ruby 中没有 Time 个库。但是,有一个 time 库。

看起来您正在使用 case-insensitive 文件系统,因此当您 require 'Time' 时,操作系统将“撒谎”给 Ruby 并告诉它 Time.rb 确实存在,尽管实际上只有一个time.rb。 (OS 将对 TIME.RBtImE.rBTiMe.Rb 或...说同样的话)

因此,Ruby 将加载 Time.rb(实际上是 time.rb)。但是,内部time库当然会在任何地方使用require 'time'。现在,Ruby 检测到文件何时已经加载并忽略它,BUT Time.rbtime.rb 是两个不同的文件名,所以Ruby 自然会加载它们。

因为它们是同一个文件,所以 time.rb 中的所有内容都将执行 两次 ,这意味着您将收到 的警告该文件中的每个常量定义每个方法定义

解决方案很简单:使用 require 'time' 因为这是库的入口文件的名称。

另一种方法是使用 case-sensitive 文件系统,在这种情况下,您只会得到一个 LoadError 异常,告诉您没有名为 Time.rb.[= 的文件28=]