我沒有在任何檔案中找到使用 require 方法的正確位置。我知道在腳本的最開頭使用 require 方法是可取的,但是在初始化程式類建構式中使用 require 方法是否可能以及正確程度如何?
通常我是這樣做的
require 'my_file'
做下面的選項有多好
class MyClass
def initialize
require 'my_file'
end
end
閱讀 require 方法檔案
uj5u.com熱心網友回復:
我沒有在任何檔案中找到使用 require 方法的正確位置。
“正確”的位置取決于您的要求以及您的編碼風格。
在初始化類建構式中使用 require 方法是否可能以及正確程度如何?
有可能的。它是否“正確”取決于您對“正確”的定義,這取決于您要做什么。
require只做三件事:
- 在加載路徑中搜索檔案。
- 檢查檔案是否已經運行。
- 如果不是,請運行該檔案。
就是require這樣。
如果您require在初始化程式中創建一個檔案,require則只會在您呼叫初始化程式時運行(通常是在您實體化一個新物件時)。
如果您在實體化物件之前需要檔案中的某些功能,那么您很不走運,因為require不會運行。
此外,require 每次實體化物件時都會運行,但由于require只運行檔案一次,那將只是浪費時間,因為它仍然會搜索檔案并檢查它是否每次都已運行。
對 like this 的詞法嵌套呼叫require也可能令人困惑。不熟悉 Ruby 的人可能會認為,通過在方法內部進行requireing ,myfile內部initialize定義的my_file范圍可能純粹是針對initialize方法的,但顯然情況并非如此:require只是運行檔案,它不執行任何范圍界定。里面的定義my_file將在任何地方定義my_file。
同樣,正在審查您的代碼的人可能會假設您認為這會創建某種范圍,并且現在可能想知道您的代碼是否存在某種錯誤或(更糟糕的)基于該假設的安全漏洞。
請注意,“正在審查您的代碼的人”很可能在兩年后成為您自己,那時您不再知道為什么要以這種方式撰寫代碼。
uj5u.com熱心網友回復:
您可以將它放在類宣告之前的檔案頂部。所以你有了:
require 'my_file'
class MyClass
def initialize
end
end
uj5u.com熱心網友回復:
這是可能的,它會正常作業,但這是非常不尋常的。我保證這會在代碼審查中提出問題。
通常,要求放在檔案的頂部。
uj5u.com熱心網友回復:
不建議在建構式方法中使用宣告,require "./file_name"因為它通常用于創建實體變數,特別是:如果您要使用所需檔案類中的實體或全域變數作為initialize(建構式)方法的引數當前類,它可能會以錯誤告終。
您可以使用這些方法require將檔案放在類的頂部:
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
這允許您在當前類中使用所有實體、類、方法、物件……等等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522917.html
標籤:轨道上的红宝石红宝石
