我没有在任何文档中找到使用require方法的正确位置。我理解在脚本的最开始使用require方法是可取的,但是在初始化器类的构造函数中使用require方法是否可能?它的正确程度如何?通常我会这样做require 'my_file'做下面的选择有多好class MyClass个def initializerequire 'my_file'endend阅读要求方法文档
require 'my_file'
class MyClass
def initialize
end
bzzcjhmw1#
我没有在任何文档中找到使用require方法的正确位置。“正确”的位置取决于您的要求以及您的编码风格。在初始化器类构造函数中使用require方法是否可能?正确程度如何?这是可能的。它是否“正确”取决于你对“正确”的定义,取决于你想做什么。require只做三件事:1.在加载路径中搜索文件。1.检查文件是否已运行。1.如果不是,请运行该文件。这就是require的全部功能。如果你在初始化器中require一个文件,require将 * 只 * 在你调用初始化器时运行(通常是在你示例化一个新对象时)。如果在示例化对象之前需要文件中的一些功能,那么就不太走运了,因为require不会运行。此外,每次示例化对象时,都要运行require,但由于require只运行文件一次,因此这只是浪费时间,因为它仍然会搜索文件并检查是否每次都运行过。在词法上嵌套对require的调用也可能会让人感到困惑。不熟悉Ruby的人可能会认为,通过在initialize方法中使用require调用myfile,my_file中的定义可能会完全局限于initialize方法,但显然情况并非如此:require只是运行文件,它不执行任何作用域。my_file中的定义将在my_file指定的位置进行定义。同样,审查您代码的人可能会假设 * 您认为 * 这会创建某种范围,并且现在可能会基于该假设怀疑您的代码是否存在某种bug或(更糟的)安全漏洞。请注意,两年后,当你不知道为什么要这样写代码时,“正在审查你代码的人”很可能就是你自己。
require
initialize
myfile
my_file
wgmfuz8q2#
你可以把它放在类声明之前的文件的顶部。所以你有:
require 'my_file' class MyClass def initialize end end
au9on6nz3#
这是可能的,它将正确工作,但它是非常不寻常的。我保证这将提出问题,在代码审查。通常,require放在文件的顶部。
gg58donl4#
不建议在构造函数方法中使用声明require "./file_name",因为它经常用于创建示例变量,尤其是:如果您打算使用所需文件类中的示例或全局变量作为当前类的initialize(构造函数)方法的参数,则可能会以错误结束。你可以用这些方法require这个文件在类的顶部:
require "./file_name"
require 'my_file' class MyClass def initialize puts "this is a constructor" end end
也可以使用require在调用类之前强烈建议使用require
class MyClass def initialize puts "this is a constructor" end end require 'my_file' object = MyClass.new object.some_method
这允许您使用当前类中的所有示例、类、方法、对象...等等。
4条答案
按热度按时间bzzcjhmw1#
我没有在任何文档中找到使用require方法的正确位置。
“正确”的位置取决于您的要求以及您的编码风格。
在初始化器类构造函数中使用require方法是否可能?正确程度如何?
这是可能的。它是否“正确”取决于你对“正确”的定义,取决于你想做什么。
require
只做三件事:1.在加载路径中搜索文件。
1.检查文件是否已运行。
1.如果不是,请运行该文件。
这就是
require
的全部功能。如果你在初始化器中
require
一个文件,require
将 * 只 * 在你调用初始化器时运行(通常是在你示例化一个新对象时)。如果在示例化对象之前需要文件中的一些功能,那么就不太走运了,因为
require
不会运行。此外,每次示例化对象时,都要运行
require
,但由于require
只运行文件一次,因此这只是浪费时间,因为它仍然会搜索文件并检查是否每次都运行过。在词法上嵌套对
require
的调用也可能会让人感到困惑。不熟悉Ruby的人可能会认为,通过在initialize
方法中使用require
调用myfile
,my_file
中的定义可能会完全局限于initialize
方法,但显然情况并非如此:require
只是运行文件,它不执行任何作用域。my_file
中的定义将在my_file
指定的位置进行定义。同样,审查您代码的人可能会假设 * 您认为 * 这会创建某种范围,并且现在可能会基于该假设怀疑您的代码是否存在某种bug或(更糟的)安全漏洞。
请注意,两年后,当你不知道为什么要这样写代码时,“正在审查你代码的人”很可能就是你自己。
wgmfuz8q2#
你可以把它放在类声明之前的文件的顶部。所以你有:
au9on6nz3#
这是可能的,它将正确工作,但它是非常不寻常的。我保证这将提出问题,在代码审查。
通常,require放在文件的顶部。
gg58donl4#
不建议在构造函数方法中使用声明
require "./file_name"
,因为它经常用于创建示例变量,尤其是:如果您打算使用所需文件类中的示例或全局变量作为当前类的initialize
(构造函数)方法的参数,则可能会以错误结束。你可以用这些方法
require
这个文件在类的顶部:也可以使用
require
在调用类之前强烈建议使用require
这允许您使用当前类中的所有示例、类、方法、对象...等等。