我对Ruby很陌生,只是在探索DSL。我想知道这是否可以在Ruby中使用,如果是这样,那怎么会这样做?
melissa = Player.new
melissa do
on :turn do
puts "It's my turn!"
end
on :win do
puts "I win! Hahahaha"
end
end
对不起,如果有人问过这个问题。我不知道该搜索什么问题。搜索DSL会产生其他因素。
答案 0 :(得分:2)
当然可以。这是一个示例,尝试修改它:
class Player
def initialize(&block)
@actions = {}
instance_eval &block
end
def on(action, &block)
@actions[action] = block
end
def act(action)
@actions[action].call if @actions[action]
end
end
melissa = Player.new do
on :turn do
puts "It's my turn!"
end
on :win do
puts "I win! Hahahaha"
end
end
melissa.act :turn #=> It's my turn!