是否可以从带有 String 的模块执行方法? - Ruby 2.7.1
Is it possible to execute a method from a module with a String ? - Ruby 2.7.1
大家好。
这个问题是上一个问题的延续:
就是这样。我目前正在我的 FreeBSD 12.1 工作站上使用 Ruby 2.7.1 进行一些测试。我的 objective 是找到一种方法来加载目录中的所有脚本。这些脚本是具有可预测名称的模块。例如,如果我有一个名为 mymodule.rb 的脚本,它将包含一个名为:Mymodule 的模块和一个方法:mymodule。所以我可以使用数组列出目录中的所有脚本。我可以使用该列表轻松 load/require 我所有的脚本文件。在一些 .sub、.chop 或 .capitalize 的帮助下,我可以从数组的每个索引中提取我需要的内容。但是这个操作的结果总是一个字符串。问题是我无法使用 String 执行方法。以前我在使用字符串中的模块名称扩展我的 main class 时遇到问题,但是给出了答案并解决了这个小问题。这是我的主要 class :
load "mymodule.rb"
class Myclass
def mymethod
var1 = "Mymodule"
extend self.class.const_get(var1)
var2 = "mymodule"
#I need something here to call the method from the module.
#puts @varmod
end
end
a = Myclass.new
a.mymethod
这是我的模块:
module Mymodule
def mymodule
@varmod = "TEST"
end
end
所以,我想知道是否有一种方法可以在 Mymodule 中执行与“扩展 self.class.const_get(var1)”相同的方法。
提前感谢您的回复!
我认为这是您正在寻找的 send
方法。以下应该有效:
send(var2)
为了发送消息的名称在设计时不是静态已知的,您可以使用 Object#public_send
方法:
public_send(var2)
在这种情况下没有必要使用 Object#send
,因为您的方法不是 private
。
大家好。
这个问题是上一个问题的延续:
就是这样。我目前正在我的 FreeBSD 12.1 工作站上使用 Ruby 2.7.1 进行一些测试。我的 objective 是找到一种方法来加载目录中的所有脚本。这些脚本是具有可预测名称的模块。例如,如果我有一个名为 mymodule.rb 的脚本,它将包含一个名为:Mymodule 的模块和一个方法:mymodule。所以我可以使用数组列出目录中的所有脚本。我可以使用该列表轻松 load/require 我所有的脚本文件。在一些 .sub、.chop 或 .capitalize 的帮助下,我可以从数组的每个索引中提取我需要的内容。但是这个操作的结果总是一个字符串。问题是我无法使用 String 执行方法。以前我在使用字符串中的模块名称扩展我的 main class 时遇到问题,但是给出了答案并解决了这个小问题。这是我的主要 class :
load "mymodule.rb"
class Myclass
def mymethod
var1 = "Mymodule"
extend self.class.const_get(var1)
var2 = "mymodule"
#I need something here to call the method from the module.
#puts @varmod
end
end
a = Myclass.new
a.mymethod
这是我的模块:
module Mymodule
def mymodule
@varmod = "TEST"
end
end
所以,我想知道是否有一种方法可以在 Mymodule 中执行与“扩展 self.class.const_get(var1)”相同的方法。
提前感谢您的回复!
我认为这是您正在寻找的 send
方法。以下应该有效:
send(var2)
为了发送消息的名称在设计时不是静态已知的,您可以使用 Object#public_send
方法:
public_send(var2)
在这种情况下没有必要使用 Object#send
,因为您的方法不是 private
。