【发布时间】:2013-10-04 02:58:15
【问题描述】:
我有一个名为Family Members 的类(在文件family_members.rb 中),其中包含name、sex、type、role 和age 等属性。
我创建了实例,称为 fm1 、 fm2 fm3 fm4 和 fm5。
#family_members.rb
require_relative 'family'
require_relative 'checkdetails'
class FamilyMembers < Family
attr_accessor :name, :sex, :status, :age
def initialize (name, sex, type, role, age)
@name = name
@sex = sex
@type = type
@role = role
@age = age
end
end
fm1 = FamilyMembers.new('Andrew','Male', 'Child', "Son" , "27" )
fm2 = FamilyMembers.new("Bill","Male", "Parent", "Father" , "63" )
fm3 = FamilyMembers.new("Samantha","Female", "Parent", "Mother" , "62" )
fm4 = FamilyMembers.new("Thomas","Male", "Child", "Dog" , "10" )
fm5 = FamilyMembers.new("Samantha", 'Female', "Child", "Dog" , "4" )
我有一个名为Parent?的方法,它检查类的实例是Parent还是Child,它的调用如下所示:
#check_details //would like to use this method
fm4.parent?
用户是否可以动态选择要检查的类的哪个实例?
我在checkdetails.rb 文件中创建了一个名为check_details 的方法:
#checkdetails.rb
def check_details
puts "What family to you want to check? choose 1 to 5"
$family = 'fm' + gets.chomp
end
但是,如果我尝试像这样调用parent 方法:
check_details
$family.parent?
它给了我以下错误:
`<top (required)>': undefined method `parent?' for "fm1":String (NoMethodError)
from -e:1:in `load'
from -e:1:in `<main>'
有没有办法动态地做到这一点?可能没有全局变量 - 因为这被认为是不好的做法?
感谢您的帮助。
【问题讨论】:
-
你可以做你想做的事。检查
Kernel#eval方法。在这种情况下,您的代码将如下所示:num = gets.chomp; eval("fm#{num}.parent?")但最好使用Array/HashofFamilyMembers
标签: ruby class dynamic methods user-input