这里我有两个文件:
def method
puts "This won't be outputted."
end
puts "This will be outputted."
Run Code Online (Sandbox Code Playgroud)
require "./file"
Run Code Online (Sandbox Code Playgroud)
运行main.rb时,它将加载file.rb中的所有代码,这样我就会得到"这将被输出".屏幕上.
是否可以加载文件而无需运行代码?
因为我想加载所有方法(在模块和类中),而不必在这些范围之外执行代码.
sep*_*p2k 38
是否可以加载文件而无需运行代码?
不,ruby文件中的所有内容都是可执行代码,包括类和方法定义(例如,当你尝试在if语句中定义一个方法时,可以看到这个,这很好用).因此,如果您不在文件中执行任何操作,则不会定义任何内容.
但是,您可以告诉ruby某些代码只有在文件直接运行时才会执行 - 而不是在需要时运行.为此,只需将代码置于if __FILE__ == $0块中即可.所以对于你的例子,这将工作:
def method
puts "This won't be outputted."
end
if __FILE__ == $0
puts "This will not be outputted."
end
Run Code Online (Sandbox Code Playgroud)
require "./file"
Run Code Online (Sandbox Code Playgroud)
这if __FILE__ == $0很好,但更符合ruby的面向对象方法的方法是将所有想要访问的方法放在一个类中(作为类方法),然后从main.rb中调用它们.
例如
file.rb
class MyUtils
def self.method
puts "this won't be outputted"
end
end
Run Code Online (Sandbox Code Playgroud)
然后在main.rb中
require "/.file.rb"
Run Code Online (Sandbox Code Playgroud)
当你想使用你的实用方法时:
MyUtils.method
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4709 次 |
| 最近记录: |