首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态调用对象

动态调用对象
EN

Stack Overflow用户
提问于 2015-05-23 16:57:24
回答 2查看 33关注 0票数 0
代码语言:javascript
复制
class Person
    def sampleMethod
    end
end

jack = Person.new
input = gets.chomp

如何通过用户输入调用jack对象?我试过这个:

代码语言:javascript
复制
input = gets.downcase.chomp.to_sym

它调用方法但调用对象。

我也试过这个:

代码语言:javascript
复制
eval input + '.sampleMethod'

这是:

代码语言:javascript
复制
Kernel.const_get(input).sampleMethod

请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-23 17:33:11

我会将每个人存储在一个散列中,其中哈希的键是可以引用的名称。

代码语言:javascript
复制
class Person
  Registry = {}

  def sample_method
    puts 'hello, world'
  end
end

Person::Registry['jack'] = Person.new

name = 'jack'  # or you can use: name = gets.chomp    
person = Person::Registry.fetch(name)
person.sample_method

在用户输入时使用eval是危险的,因为它为用户提供了各种可能意外或恶意地破坏您的程序的方法。我不会把eval作为解决这个相对简单问题的第一个工具。

票数 1
EN

Stack Overflow用户

发布于 2015-05-23 17:14:08

代码语言:javascript
复制
class Person
    def sampleMethod
       puts "hello, world"
    end
end

jack = Person.new
input = "jack"

您可以使用eval调用对象。

代码语言:javascript
复制
eval input
=> #<Person:0x007f916ba16c20>
eval input + ".sampleMethod"
hello, world
=> nil

jack.object_id
=> 70131276363280
(eval input).object_id
=> 70131276363280

它们具有相同的对象id,因此它们调用相同的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30415312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档