【发布时间】:2020-05-04 22:10:53
【问题描述】:
我正在 Ruby 中创建一种变量系统,用户可以在其中创建变量。如果他们提供变量名称和内容,它会将给定的名称和字符串添加到数组中,从而向数组中添加另外两个项目。代码如下:
$vars = []
def create(name, value)
$vars << name
$vars << value
end
我还想添加一个“删除”选项,其中用户键入delete("varName") 并在后台搜索$vars 数组中具有相同值的项目并将其删除。有没有办法做到这一点?另外,有什么方法可以获取项目的编号(例如,数组中的项目是["a", "b", "c", "d"],用户想要删除"d",然后程序返回3,因为那是"d"的位置。
【问题讨论】:
-
自 Ruby v1.8 起,无法动态创建局部变量。
-
数组中的项目不会是
["a", "b", "c", "d"]。他们将是["a", "a's value", "b", "b's value", ...] -
尽量远离 Ruby 中的全局变量远离。它们以
$为前缀,并且只应在特殊情况下使用。这样做的 Ruby 方法,假设不是 XY Problem 有更好的解决方案,是创建一个带有@vars实例变量的类,然后使用像create这样的对象实例方法来操作它,或者,甚至更好,[]=(name, value)。我不知道这与哈希有何不同。 -
值得注意的是,Ruby 已经可以使用
instance_variable_set和local_variable_set创建实际变量。你不需要伪造它。