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.RB
或 tImE.rB
或 TiMe.Rb
或...说同样的话)
因此,Ruby 将加载 Time.rb
(实际上是 time.rb
)。但是,内部,time
库当然会在任何地方使用require 'time'
。现在,Ruby 检测到文件何时已经加载并忽略它,BUT Time.rb
和 time.rb
是两个不同的文件名,所以Ruby 自然会加载它们。
因为它们是同一个文件,所以 time.rb
中的所有内容都将执行 两次 ,这意味着您将收到 的警告该文件中的每个常量定义和每个方法定义。
解决方案很简单:使用 require 'time'
因为这是库的入口文件的名称。
另一种方法是使用 case-sensitive 文件系统,在这种情况下,您只会得到一个 LoadError
异常,告诉您没有名为 Time.rb
.[= 的文件28=]
当我导入 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.RB
或 tImE.rB
或 TiMe.Rb
或...说同样的话)
因此,Ruby 将加载 Time.rb
(实际上是 time.rb
)。但是,内部,time
库当然会在任何地方使用require 'time'
。现在,Ruby 检测到文件何时已经加载并忽略它,BUT Time.rb
和 time.rb
是两个不同的文件名,所以Ruby 自然会加载它们。
因为它们是同一个文件,所以 time.rb
中的所有内容都将执行 两次 ,这意味着您将收到 的警告该文件中的每个常量定义和每个方法定义。
解决方案很简单:使用 require 'time'
因为这是库的入口文件的名称。
另一种方法是使用 case-sensitive 文件系统,在这种情况下,您只会得到一个 LoadError
异常,告诉您没有名为 Time.rb
.[= 的文件28=]