我有一個類,名爲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'](http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-eval)方法。在這種情況下,您的代碼將如下所示:'num = gets.chomp; eval(「fm#{num} .parent?」)'但是最好使用'FamilyMembers'的'Array' /'Hash' – Featalion