是否需要只需要文件和 modules.rb 文件?
Is there a need for require-only files and modules.rb files?
我被指派对现有的 Ruby gem 项目进行一些维护。我不是 Ruby 本地人,但有些文件对我来说似乎是不必要的。
假设文件夹 a/b/c
是项目的根目录,代表模块 A::B::C
。还有子模块A::B::C::D1
、A::B::C::D2
、A::B::C::D3
等
我发现第一个不合逻辑的文件是文件夹 a/b/c
中的文件 modules.rb
。这包含整个项目中每个模块的空模块声明:
module A::B::C
end
module A::B::C::D1
end
module A::B::C::D2
end
# etc
我试图找出这个文件的用途,但除了 modules.rb
实际上包含所有代码的示例(例如 https://github.com/shrinidhi99/learn-ruby-for-fun/blob/master/Modules.rb, https://borg.garasilabs.org/andrew/ruby-training/-/blob/master/codes/modules.rb, https://zetcode.com/lang/rubytutorial/oop2/).在项目本身的任何地方也没有引用它。它似乎唯一能实现的是提供关于 rubydoc.info 的文档。这可能会内联在单独的文件中。
除此之外,大多数模块 M
在 m
文件夹旁边都有一个匹配文件 m.rb
。例如,文件 a/b/c.rb
、a/b/c/d1.rb
等。该文件只包含匹配模块中所有文件的 require
语句。这意味着文件 a/b/c.rb
也有 require
语句用于 a/b/c/d1
等
有两个A::B::C
的子模块没有包含在这些require文件中,这些模块有自己的几个子模块。那,再加上每个文件应该只提及它的需求本身,表明这些需求文件是完全不必要的。我能想到的唯一原因在这里提到:
我认为我可以简单地删除这些文件是错误的,还是它们仍然是必要的?或者这只是“Ruby 方式”?
像这样的东西应该有用。一个文件——一个 class(或模块)。如果你有命名空间并且其中有通用逻辑——命名空间的单独文件
# a.rb
Dir[File.join(__dir__, 'a', '*.rb')].each { |f| require f }
module A
# general A logic here
end
# a/b.rb
Dir[File.join(__dir__, 'b', '*.rb')].each { |f| require f }
module A
module B
# general A::B logic here
end
end
# a/b/c.rb
module A
module B
module C
end
end
end
# a/b/d.rb
module A
module B
module D
end
end
end
# x.rb
require_relative 'a'
class X
include A::B::C
end
我被指派对现有的 Ruby gem 项目进行一些维护。我不是 Ruby 本地人,但有些文件对我来说似乎是不必要的。
假设文件夹 a/b/c
是项目的根目录,代表模块 A::B::C
。还有子模块A::B::C::D1
、A::B::C::D2
、A::B::C::D3
等
我发现第一个不合逻辑的文件是文件夹 a/b/c
中的文件 modules.rb
。这包含整个项目中每个模块的空模块声明:
module A::B::C
end
module A::B::C::D1
end
module A::B::C::D2
end
# etc
我试图找出这个文件的用途,但除了 modules.rb
实际上包含所有代码的示例(例如 https://github.com/shrinidhi99/learn-ruby-for-fun/blob/master/Modules.rb, https://borg.garasilabs.org/andrew/ruby-training/-/blob/master/codes/modules.rb, https://zetcode.com/lang/rubytutorial/oop2/).在项目本身的任何地方也没有引用它。它似乎唯一能实现的是提供关于 rubydoc.info 的文档。这可能会内联在单独的文件中。
除此之外,大多数模块 M
在 m
文件夹旁边都有一个匹配文件 m.rb
。例如,文件 a/b/c.rb
、a/b/c/d1.rb
等。该文件只包含匹配模块中所有文件的 require
语句。这意味着文件 a/b/c.rb
也有 require
语句用于 a/b/c/d1
等
有两个A::B::C
的子模块没有包含在这些require文件中,这些模块有自己的几个子模块。那,再加上每个文件应该只提及它的需求本身,表明这些需求文件是完全不必要的。我能想到的唯一原因在这里提到:
我认为我可以简单地删除这些文件是错误的,还是它们仍然是必要的?或者这只是“Ruby 方式”?
像这样的东西应该有用。一个文件——一个 class(或模块)。如果你有命名空间并且其中有通用逻辑——命名空间的单独文件
# a.rb
Dir[File.join(__dir__, 'a', '*.rb')].each { |f| require f }
module A
# general A logic here
end
# a/b.rb
Dir[File.join(__dir__, 'b', '*.rb')].each { |f| require f }
module A
module B
# general A::B logic here
end
end
# a/b/c.rb
module A
module B
module C
end
end
end
# a/b/d.rb
module A
module B
module D
end
end
end
# x.rb
require_relative 'a'
class X
include A::B::C
end