gpt4 book ai didi

Ruby 作用域问题,选项解析

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

所以我正在使用很棒的 trollop gem 来进行选项解析,但是我在设置的变量范围方面遇到了一个普遍的问题。

require 'trollop'

class MyClass
opts = Trollop::options do
opt :thing, "does something", default: "blah", type: String
end

def my_method
puts opts[:thing]
end
end

但是我得到:

undefined local variable or method `opts' for #<MyClass:0x0000010203c840> (NameError)

知道我的示波器做错了什么吗?

最佳答案

这里大概有六个选项:实例变量,类实例变量,类变量,类常量,全局变量,全局常量。使用哪个取决于您的需要。

实例变量 - 每个 MyClass 实例都有自己的选项:

class MyClass
def initialize
@opts = ...
end

def my_method
puts @opts[:thing]
end
end

类实例变量 - 可以重新分配的类中的单个值:

class MyClass
@opts = ...
class << self
attr_accessor :opts
end

def my_method
puts self.class.opts[:thing]
end
end

类变量 - 每个 MyClass 和所有子类共享相同的值(方便的语法,但很少是个好主意):

class MyClass
@@opts = ...
def my_method
puts @@opts[:thing]
end
end

类常量 - 可以改变但不能重新分配的单个对象。从此类轻松访问,通过 MyClass::OPTS 从其他类访问:

class MyClass
OPTS = ...
def my_method
puts OPTS[:thing]
end
end

全局变量 - 你的整个应用程序中只能有其中一个;全局变量通常是不明智的,但可能适合独立应用程序的选项:

$opts = ...
class MyClass
def my_method
puts $opts[:thing]
end
end

全局常量 - 从许多类访问,不能设置为新值,但可以改变:

OPTS = ...
class MyClass
def my_method
puts OPTS[:thing]
end
end

关于Ruby 作用域问题,选项解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410179/

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