Ruby:如何访问模块局部变量?
发布时间:2020-12-17 01:47:26 所属栏目:百科 来源:网络整理
导读:我得到这个错误:MyModule.rb:4:在getName’:未定义的局部变量或’MyModule的方法’:模块(NameError) 文件1 module MyModule s = "some name" def self.getName() puts s end end 文件2 require './MyModule.rb'include MyModuleMyModule.getName() 这与
我得到这个错误:MyModule.rb:4:在getName’:未定义的局部变量或’MyModule的方法’:模块(NameError)
文件1 module MyModule s = "some name" def self.getName() puts s end end 文件2 require './MyModule.rb' include MyModule MyModule.getName() 这与范围有关,但如果我在方法之前声明它,我不理解为什么会发生这种情况.确实只包含mixin方法而不包含变量?如何更改模块以便打印出我在模块中定义的变量? 解决方法
def创建了一个新范围.在某些语言中,内部作用域可以在周围范围内看到局部变量 – 但不能在ruby中看到.您可以使用常量代替: module MyModule S = "some name" def getName() puts S end end include MyModule getName --output:-- some name 但是可以从任何地方访问常量: module MyModule S = "some name" def getName() puts S puts Dog::S end end module Dog S = "hello" end include MyModule getName --output:-- some name hello 更高级的解决方案涉及使用闭包.与def不同,块可以看到周围范围中的局部变量,这被称为关闭变量.这是一个例子: module MyModule s = "some name" define_method(:getName) { puts s } end include MyModule getName --output:-- some name 使用闭包的好处是只有块可以访问s.
这取决于变量的种类: module MyModule A = 'hello' s = 'goodbye' end include MyModule puts A puts s --output:-- hello 1.rb:9:in `<main>': undefined local variable or method `s' for main:Object (NameError) 与def一样,module关键字创建一个新范围.您知道方法完成执行后如何销毁局部变量吗?当模块完成执行时,其局部变量也会被销毁: module MyModule puts "MyModule is executing" s = 'goodbye' end include MyModule puts s --output:-- MyModule is executing 1.rb:7:in `<main>': undefined local variable or method `s' for main:Object (NameError) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |