如何通过Ruby中的用户输入创建唯一的类对象



嘿,有人知道如何使用gets.chomp方法获取用户输入,然后将该唯一用户输入定义为类对象吗?或者任何方法。但坚持红宝石,而不是铁轨。

显然这不会起作用:

puts "What would you like to save the contact under?"
ncontact = gets.chomp
ncontact = Contacts.new

因为它只是重新定义了不接触。有什么办法我能做到这一点吗?或者,即使我可以在一个新方法中使用self命令重命名对象。我基本上希望用户能够自己创建一个联系人,并将该联系人保存在用户想要的名称下,并能够使用另一种方法显示该联系人的属性(或信息)。第二个四月已经足够容易了。

我无法弄清楚的是,如何有一个方法,每次运行时都会以用户希望的名称创建一个新对象。

正如铁皮人所指出的那样,你所问的既有风险,也非常令人沮丧。或者,用他的话说:

我看不出有什么理由认为这样做是件好事。这类似于旧的Perl做法,即使用变量的内容作为变量的名称,Perl社区出于维护和可读性的原因强烈反对这种做法。

我同意他的评价。话虽如此,这里有一种方法可以满足您的要求:


试着通读RubyMonk的元编程指南,至少读一部分…

你会遇到eval,它会让你更接近你想要的。

试试,在你的例子中:

puts "What would you like to save the contact under?"
ncontact = gets.chomp
Kernel.eval "#{ncontact} = Contacts.new"

其他更安全的解决方案包括使用哈希作为映射。即

contacts_map = {}
puts "What would you like to save the contact under?"
ncontact = gets.chomp
contacts_map[ncontact] = Contacts.new

虽然我不知道你为什么会。。。变量名称仅与您自己的代码相关。客户只看到你给他们看的东西。还可以在Contacts类中有一个属性,例如客户端用于访问的show_as字段。

此外,考虑以下用户输入

exit; name

这可能表明该方法存在一些固有风险。。。

用户刚刚强制您的应用程序退出(!)。如果您的代码在服务器或公共应用程序中运行,这将是一个非常严重的安全缺陷。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新