【发布时间】:2018-09-08 19:47:50
【问题描述】:
元信息:找到了类似的帖子,Ruby 的帖子为零。 使用多个搜索可访问性术语创建标题
好的,现在进入问题... 我正在尝试自动生成新变量(moreso),我想创建一个这样做的机制。
class User
attr_accessor :name
def initialize(name)
@name = name
end
end
def CreateUser(name)
name = User.new(name)
end
CreateUser("Arnold")
p Arnold
我在方法“CreateUser”的名称参数中使用了一个参数作为我要声明的变量的名称以及发送到创建我的类成员的代码中的信息。
我很快就记起来了,在 Ruby 中,方法中的变量只对方法是局部的。如果不是这种情况,并且我可以从方法中吐出新变量,那么我可以轻松地生成我的用户 - 但事实并非如此。有解决办法吗?还是手动声明一个新变量只是游戏名称?
【问题讨论】:
-
您是否希望
Arnold成为自己的常量,例如您的示例中出现的类/结构?如果是这样,有几种不同的方法可以实现这一点。Arnold应该是User的一个实例,还是它自己的从User派生的类? -
手动声明一个新变量确实是“游戏名称”的真相。从技术上讲,您可以使用
Object.const_set在任何地方定义一个新的全局变量,但这不是一个好习惯。如果您有同名的用户怎么办?您只能让变量指向其中之一。如果用户的名称与另一个常量冲突(例如,某个名为“String”的人)怎么办?通常常量(以大写字母开头的变量)无论如何都不是动态定义的,它与“常量”的概念有点冲突 -
自 Ruby 版本 1.8.7 以来,无法动态创建局部变量;实例变量,是的,局部变量,不是。
-
ForeverZer0 - Arnold 应该是 User MaxPleaner 的一个实例 - 那么,如果我创建一个不同的机制来创建变量名呢?说一个 random_ID_generator 方法,它创建一个随机的字母/数字字符串,它还检查它是否是唯一的?那样的东西不会起作用吗?我想了解有关 Object.const_set 的更多信息,因为它听起来像我正在寻找的东西。卡里 - 我明白了。
标签: ruby variables metaprogramming generate