我对 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 会产生其他东西。
你当然可以。这是一个示例,尝试修改它:
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!