1

元信息:找到了类似的帖子,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 中,方法中的变量仅对方法是本地的。如果不是这种情况,并且我可以从方法中吐出新变量,那么我可以轻松地生成我的用户 - 但事实并非如此。有解决办法吗?还是手动声明一个新变量只是游戏的名称?

4

1 回答 1

1

你的问题有点令人困惑。乍一看,您似乎正在寻找一些元编程技术来动态创建实例变量,例如:

class User
  def new_variable name, value
      instance_variable_set "@#{name}", value
  end
end

但是,在更仔细地查看您实际尝试解决的问题时,似乎真正的问题是您没有使您的方法成为原始对象的一部分。这可能是您真正想要的:

class User
  attr_accessor :name

  def initialize name
    @name = name
  end 

  def create_user
    # do whatever you need to do to "create" a user
    pp name
  end
end

u = User.new 'Arnold'
u.create_user

使对象能够对存储在对象中的数据调用实例方法是封装的一部分。这很可能是你真正追求的。

于 2018-09-08T20:35:07.440 回答