使Ruby块返回一个数组?

bea*_*akr 1 ruby dsl block

我已经制作了一个类似DSL的小程序,用于向阵列添加饮料.这是使用instance_eval&block创建快速程序的一个非常基本的例子.

这是程序:

class Drinks
  def initialize(&block) # Initialize drinks
    @drinks = []
    instance_eval &block
  end

  def drink(d)
    @drinks << d
  end # Add drink

  def all_drinks
    puts @drinks
  end

end

add_drinks = Drinks.new do
  drink "water"
  drink "soda"
  drink "juice"
end

add_drinks.all_drinks
Run Code Online (Sandbox Code Playgroud)

计划是add_drinks自动返回,所以你不必使用add_drinks.all_drinks.这可能吗?谢谢.

Mik*_*iet 5

您可以从Array继承Drinks,因此您可以像使用数组一样处理新实例

class Drinks < Array
  def initialize(&block) # Initialize drinks
    instance_eval &block
  end

  def drink(d)
    self << d
  end # Add drink
end

add_drinks = Drinks.new do
  drink "water"
  drink "soda"
  drink "juice"
end

add_drinks  #  => ["water", "soda", "juice"] 
Run Code Online (Sandbox Code Playgroud)