在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Ruby  HTML/ Ruby 中如何顯式地終止被 using 的 refinement?

Ruby 中如何顯式地終止被 using 的 refinement?

煩請觀察以下代碼:

module A
    refine String
        def reverse
            self
        end
    end
end

using A
p "abc".reverse
# => "abc"

remove_using A
p "abc".reverse
# => "cba"

請問是否存在這樣效果的 remove_using 方法?以動態(tài)消除 using 了一個 refinement 后產(chǎn)生的影響。

根據(jù)觀察,似乎這是故意為之,因為語言設計者希望 refinement 盡可能地被靜態(tài)地使用:

Because refinement activation should be as static as possible.
回答
編輯回答
你好胸

細化refine:與打開類不同,細化在默認情況下并不生效。細化的作用范圍只在該模塊內部有效。細化和打開類的作用相似,區(qū)別在于細化不是全局性的。
細化只在兩種場合有效:1.refine代碼塊內部;2.從using語句的位置開始到模塊結束(如果是在模塊內部調用using語句),或者到文件結束(如果是在頂層上下文中調用using)。
在細化有限的作用域范圍內,其作用跟打開類(或者叫猴子補丁)是一樣的。
細化一個類就像把一個補丁直接打到原有代碼上一樣。

2018年5月25日 08:11