我已经制作了一个类似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.这可能吗?谢谢.
您可以从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)