gpt4 book ai didi

模块内的 Ruby 脚本执行

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:37 25 4
gpt4 key购买 nike

为什么下面的失败了?

module Test
def test
puts "test"
end

puts "testing"
test
end

我得到这个输出:

testing
test.rb:6:in `test': wrong number of arguments (ArgumentError)
from test.rb:6:in `<module:Test>'
from test.rb:1:in `<main>'

是不是因为模块还没有“编译”,因为还没有到达 end 关键字?

最佳答案

使用以前未使用过的名称可能会消除您的困惑:

module Test
def my_test
puts "my_test"
end
puts "testing"
my_test
end

结果

testing
NameError: undefined local variable or method `my_test' for Test:Module

module...end block 中,当您调用 my_test 时,什么是 self(隐式接收器)?它是模块 Test。并且没有my_test“模块方法”。上面定义的 my_test 方法就像一个实例方法,被发送到包含该模块的某个对象。

您需要将my_test 定义为“模块方法”:

module Test
def self.my_test
puts "my_test"
end
puts "testing"
my_test
end

结果

testing
my_test

如果您希望 my_test 作为实例方法并且您希望在模块定义中调用它:

method Test
puts "testing"
Object.new.extend(self).my_test
end

给予

testing
my_test

关于模块内的 Ruby 脚本执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com