1

不自然な例を許して、もし私が持っていれば...

class Condiment
  def ketchup(quantity)
    puts "adding #{quantity} of ketchup!"
  end
end

class OverpricedStadiumSnack
  def add
    Condiment.new
  end
end

hotdog = OverpricedStadiumSnack.new

...呼び出し時にhotdog内部からインスタンス化されたオブジェクトにアクセスする方法はありますか?Condiment#ketchuphotdog.add.ketchup('tons!')


これまでのところ、私が見つけた唯一の解決策はhotdog、次のように明示的に渡すことです。

class Condiment
  def ketchup(quantity, snack)
    puts "adding #{quantity} of ketchup to your #{snack.type}!"
  end
end

class OverpricedStadiumSnack
  attr_accessor :type

  def add
    Condiment.new
  end
end

hotdog = OverpricedStadiumSnack.new
hotdog.type = 'hotdog'

# call with
hotdog.add.ketchup('tons!', hotdog)

hotdog...しかし、明示的に渡さずにこれを実行できるようにしたいと思います。

4

1 に答える 1

2

多分:

class Condiment
  def initialize(snack)
    @snack = snack
  end

  def ketchup(quantity)
    puts "adding #{quantity} of ketchup! to your #{@snack.type}"
  end
end

class OverpricedStadiumSnack
  attr_accessor :type

  def add
    Condiment.new(self)
  end
end

hotdog = OverpricedStadiumSnack.new
hotdog.type = 'hotdog'
hotdog.add.ketchup(1)
于 2012-07-29T06:52:47.980 に答える