我在帮助文件中的私有方法中出错。辅助文件的模块HxHelper
如下所示。我想在Rails控制台中运行method_2
,以在本地系统中重新创建错误。
module HxHelper
def method_1{
"key_1": "@h.htype"
"key_2": "value_2"
+ method_2}
end
private
def method_2{
"key1": "value_1"}
end
在我的控制器文件中,我定义了一个新类并包含以前的帮助文件。我尝试了以下方法。
obj = Class.new
和obj.method_1
。我在method_1中收到错误的未定义方法类型。炒作是房屋表中的属性。HxHeleper::method_1
:Error - method_1 is not defined in HxHelper module.
method_2
定义为self
:无效。有人可以帮助我了解我在做什么错吗?
答案 0 :(得分:3)
在此示例中,您有一些语法错误。您要在哈希行的末尾使用逗号,不能将两个哈希加在一起,而需要合并。合并将接收器(您正在调用合并的对象)并覆盖参数中的所有值。此外,在哈希中使用:
时,键最终会变成符号,这意味着您不需要引号。
这是定义帮助程序模块的正确方法。
module HxHelper
def method_1
{
key_1: "@h.htype",
key_2: "value_2",
}.merge(method_2)
end
private
def method_2
{
key1: "value_1",
}
end
end
然后您可以像这样使用它:
class Test
include HxHelper
end
t = Test.new
t.method_1
这将返回:
{:key_1=>"@h.htype", :key_2=>"value_2", :key1=>"value_1"}
如果调用t.method_2
,则会在调用私有方法时出错。
如果method_2的哈希具有键key_1
,则您的返回值为:
{:key_1=>"value_1", :key_2=>"value_2"}
因为自变量中的:key_1
覆盖了接收方哈希中的那个。
如果您要调用该私有方法,可以执行以下操作:
t.send(:method_2)
如果您有一个采用参数的方法,则只需将它们添加在方法名称的符号之后:
private
def test(num1, num2)
return(num1 + num2)
end
send(:test, 1, 2)
这将返回3
答案 1 :(得分:1)
假设我们可以解决您的语法问题,那么“我如何在Ruby中调用私有方法?”的标准答案是什么?与{s {1}}中的.send()一起使用。
手动调试之后,学习编写自动化测试。 Rails为他们提供了业界领先的典范支持。测试将取代您目前正在滥用控制台的实验和调查角色。