- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
主要问题:在Ruby API docs对于 module_function
方法,我看到了以下代码示例:
module Mod
def one
"This is one"
end
module_function :one
end
class Cls
include Mod
def call_one
one
end
end
Mod.one #=> "This is one"
c = Cls.new
c.call_one #=> "This is one"
module Mod
def one
"This is the new one"
end
end
Mod.one #=> "This is one"
c.call_one #=> "This is the new one"
如果我正确阅读这段代码,我会看到以下内容:
Mod
的模块,以及一个名为 one
的方法。然后调用 module_function
方法,将此方法的名称作为参数传递。Cls
的类,Mod
模块包含在该类中,使该类可以访问 Mod
中定义的方法>。然后创建一个包装器方法,它只是将其调用委托(delegate)给模块方法。在那之后我就感到困惑了。然后重新打开该模块并创建 one
方法的新实现。然后再次执行两个原始方法调用(模块调用和类实例调用),这次具有不同的输出。
如果从各自的方法调用中显示两个不同的输出,这意味着模块中现在必须有两个具有相同名称的不同方法。我对此是否正确?
相关问题:出于好奇,我尝试了以下代码,但没有产生相同的结果:
module Sprocket
def create
"Sprocket"
end
module_function
def create
"Sprocket 2.0"
end
end
class SprocketFactory
include Sprocket
def make
create
end
end
p Sprocket.create #=> "Sprocket 2.0"
p SprocketFactory.new.make #=> "Sprocket 2.0"
因此,如果同时定义了两个 one
方法(而不是像文档中那样重新打开模块),API 示例代码会是什么样子?或者这样的事情是不可能的?
最佳答案
what would the API example code look like if the two
one
methods had been defined at the same time
module Sprocket
def create
"Sprocket"
end
module_function :create
def create
"Sprocket 2.0"
end
end
你应该想象一个不可逆转的时间线。
第一个例子(带one
s):引入一个实例方法one
, 将其声明为模块方法,引入新的实例方法 one
.模块方法保持不变。
您的代码 create
: 引入实例方法 create
, 为下面用 module_function
声明的所有内容引入新的“双重”范围, 都引入了新的模块方法并重新声明了实例方法。
上面的代码:引入一个实例方法,声明它是一个模块方法,引入新的实例方法。
关于ruby - 定义一个 `module_function` 然后覆盖相同的方法 : how many methods exist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46567272/
我在 SQL 查询中使用了一个简单的 IF NOT EXISTS/WHERE NOT EXISTS 语句(我都尝试过),但我总是收到 mysql 错误,不知道为什么。尝试使用不同的引号,检查我的 My
我有 2 个表:tbl1 和 tbl2。我想从 tbl1 返回一行,其中包含以下列:col1、col2、col3、can_be_deleted 、有重要项目。这个想法是,can_be_deleted
如果您是 "t1".persona_1_id = 2,则预期结果应返回 persona_id = 4。 like --- id persona_1_id persona_2_id liked 1 2
我遇到了这个用于执行幂等插入的 github SQL 代码示例。完全按照我想要的方式工作。我不想使用 EXISTS,因为我觉得它有点困惑。可以使用联接对相同的操作进行编码吗? 下面是我在 github
public bool CheckTblExist(string TblName) { try { string cmTxt = "s
表1 Id Name DemoID 1 a 33 2 b 44 3 c 33 4 d 33 5 e 44 表2 Id DemoID IsT
我对 SQL 非常陌生。我想知道当我使用“IF EXISTS”或“IF NOT EXISTS”时会发生什么。例如:以下两个语句有什么区别: 语句 1:(存在) IF EXISTS( SELECT OR
我正在更新 exist-db 集合中的 XML 文件,我必须检查是否存在 id 以决定是否必须在我的文档中替换或插入某些内容。 我注意到随着文件的增长,查询执行时间显着恶化,我决定为我的文件添加一个索
我有一个正在尝试更新的数据库,但我不明白为什么会收到有关不存在的列的奇怪错误。当我使用“heroku pg:psql”访问数据库时,我完全可以看到该列。我找到了couple其他questions遇到类
我有一个这样的查询 SELECT ... FROM ... WHERE (SELECT EXISTS (SELECT...)) which did not return anything th
我有一个可以对数据库执行插入和更新的程序,我从 API 获取数据。这是我得到的示例数据: $uname = $get['userName']; $oname = $get['offerNa
我的批处理文件中有这个脚本 -- if not exist "%JAVA_HOME%" ( echo JAVA_HOME '%JAVA_HOME%' path doesn't exist) -
有没有办法让 Directory.Exists/File.Existssince 区分大小写 Directory.Exists(folderPath) 和 Directory.Exists(folde
考虑使用这两个表和以下查询: SELECT Product. * FROM Product WHERE EXISTS ( SELECT * FROM Codes
我正在使用 Subclipse 1.6.18 使用 Eclipse 3.72 (Indigo) 来处理 SVN 1.6 存储库。这一切都在 Ubuntu 下运行。 我有一个项目,在我更新我的 Ecli
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
我有兴趣为需要使用 NOT EXISTS 的应用程序编写查询。子句来检查一行是否存在。 我正在使用 Sybase,但我想知道一般 SQL 中是否有一个示例,您可以在其中编写具有 NOT EXISTS
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
下面是代码示例: CREATE TABLE #titles( title_id varchar(20), title varchar(80)
我曾经这样编写 EXISTS 检查: IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET
我是一名优秀的程序员,十分优秀!