我有以下问题。我想有一个方法,让我们称之为method_A,检查调用method_A的对象名称。
这是一个简单的参考,但我要做的事情会比这复杂得多,我明白有一种替代方案能够以更好的方式解决我的需求,但是唉代码几乎完成了,我没有足够的时间来调整。无论如何,这里是:
class Picture
attr_accessor :size
def resize
name = self.get_object_name_here
case name
when Big #Can be string or variable, I don't mind
self.size *= .5
when Medium
when Small
self.size *= 2
else
end
def get_object_name_here
object_name
end
end
Big = Picture.new
Medium = Picture.new
Small = Picture.new
Big.size = 10
Medium.size = 10
Small.size = 10
Big.resize => 5
Medium.resize => 10
Small.resize => 20
如果有办法可以做到
name = object_name
那将是非常有用的
非常赞赏!
编辑:抱歉大写,中等,小。他们是错别字。
答案 0 :(得分:1)
您必须更改班级的定义
class Picture
attr_accessor :size, :name
def initialize(name)
@name = name
@size = 10
end
def resize
case name
when "Big"
self.size *= 0.5
when "Medium"
when "Small"
self.size *= 2
else
end
end
end
当您使用initialize
传递所有参数时,Ruby将调用new
方法。你可以像这样使用这个类:
big = Picture.new("Big")
medium = Picture.new("Medium")
small = Picture.new("Small")
puts "before resize"
puts big.size
puts medium.size
puts small.size
big.resize
medium.resize
small.resize
puts "after resize"
puts big.size
puts medium.size
puts small.size
结果
before resize
10
10
10
after resize
5.0
10
20