Ruby使用默认库获取调用方对象的名称

时间:2014-01-14 09:44:34

标签: ruby object methods

我有以下问题。我想有一个方法,让我们称之为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

那将是非常有用的

非常赞赏!

编辑:抱歉大写,中等,小。他们是错别字。

1 个答案:

答案 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