第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從Rails 3中的lib文件夾加載模塊/類的最佳方法?

從Rails 3中的lib文件夾加載模塊/類的最佳方法?

蕭十郎 2019-07-06 13:09:07
從Rails 3中的lib文件夾加載模塊/類的最佳方法?由于最新的Rails 3版本不再是從lib中自動加載模塊和類,那么加載它們的最佳方法是什么?來自GitHub:A few changes were done in this commit:Do not autoload code in *lib* for applications (now you need to explicitly  require them). This makes an application behave closer to an engine  (code in lib is still autoloaded for plugins);
查看完整描述

3 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊

截至Rails 2.3.9,有一個背景config/application.rb可以在其中指定包含要自動加載的文件的目錄。

來自申請.rb:

# Custom directories with classes and modules you want to be autoloadable.# config.autoload_paths += %W(#{config.root}/extras)


查看完整回答
反對 回復(fù) 2019-07-06
?
森林海

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊

自動裝飾品的魔力

我認(rèn)為控制自動裝填的文件夾的選項在其他答案中已經(jīng)足夠了。然而,如果其他人有困難的東西加載,雖然他們已經(jīng)修改了他們的自動路徑要求,然后這個答案試圖解釋什么是魔術(shù)背后的自動加載的事情。

因此,在從子目錄加載內(nèi)容時,您應(yīng)該注意到一個問題或約定。有時候,Ruby/Rails的魔力(這次主要是Rails)會讓人很難理解為什么會發(fā)生一些事情。只有當(dāng)模塊名稱與父目錄名稱相對應(yīng)時,自動加載路徑中聲明的任何模塊才會被加載。所以如果你想把lib/my_stuff/bar.rb類似于:

module Foo
  class Bar
  endend

它不會自動加載。如果將父dir重命名為foo因此,將模塊托管在PATH上:lib/foo/bar.rb..它會在你身邊的。另一個選項是將您想要的文件命名為模塊名。很明顯,那么只能有一個名為這個名稱的文件。如果您需要將您的文件拆分成許多文件,您當(dāng)然可以使用該文件來要求其他文件,但我不建議這樣做,因為在開發(fā)模式和修改其他文件時,Rails無法自動為您重新加載這些文件。但是,如果您真的想要的話,您可以按模塊名獲得一個文件,然后指定使用該模塊所需的實際文件。所以你可以有兩個文件:lib/my_stuff/bar.rblib/my_stuff/foo.rb前者與上面相同,后者包含一條單行:require "bar"這也同樣有效。

我覺得我不得不補充一件更重要的事情。最近,每當(dāng)我想要在lib目錄中有一些需要自動加載的內(nèi)容時,我就會開始想,如果這是我專門為這個項目開發(fā)的東西(通常是這樣的),有一天它可能會變成許多項目或Git子模塊中使用的“靜態(tài)”代碼片段,等等。在這種情況下,它肯定應(yīng)該在lib文件夾中),那么它的位置可能根本不在lib文件夾中。也許它應(yīng)該在應(yīng)用程序文件夾下的一個子文件夾中。我有一種感覺,這是一種新的Rails方式。顯然,同樣的魔法也在起作用,不管你把你的東西放在什么地方,它對這些東西都有好處。總之,這只是我對這個問題的想法。你可以自由地不同意。*)


更新:關(guān)于魔法的類型.。

正如Severin在他的評論中指出的那樣,核心的“自動加載模塊機制”當(dāng)然是Ruby的一部分,但是自動加載路徑不是。autoload :Foo, File.join(Rails.root, "lib", "my_stuff", "bar")..當(dāng)您第一次嘗試引用模塊foo時,它將為您加載。然而,Rails所做的是,它為我們提供了一種嘗試從已注冊文件夾中自動加載東西的方法,并且已經(jīng)以這樣一種方式實現(xiàn)了,即它需要假定一些關(guān)于命名約定的內(nèi)容。如果沒有這樣實現(xiàn),那么每次引用當(dāng)前未加載的內(nèi)容時,它都必須遍歷所有autooload文件夾中的所有文件,并檢查其中是否包含您試圖引用的內(nèi)容。這反過來又會挫敗自動加載和自動加載的想法。但是,有了這些約定之后,它可以從您試圖加載的模塊/類中扣除可能定義的內(nèi)容,并只加載該模塊/類。


查看完整回答
反對 回復(fù) 2019-07-06
  • 3 回答
  • 0 關(guān)注
  • 704 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號