ruby中的"on"关键字是什么?

UXk*_*EZ7 3 ruby

我是一名学习ruby的学生,我不确定此代码中的"on"是什么.

https://github.com/cinchrb/cinch/blob/master/examples/basic/seen.rb

例如,

on :channel do |m|
  @users[m.user.nick] = Seen.new(m.user.nick, m.channel, m.message, Time.new)
end
Run Code Online (Sandbox Code Playgroud)

谁能解释一下?

bio*_*net 5

它不是关键字,而是在Cinch::Bot刚刚创建的对象上调用的简单实例方法.您传递给的块将Cinch::Bot.new根据该新对象进行评估(https://github.com/cinchrb/cinch/blob/master/lib/cinch/bot.rb#L363).这是一个称为"DSL"(领域特定语言)的巧妙技巧:它看起来像魔术关键词或全局方法,但它实际上只是在普通对象上调用的方法.

看起来像onhttps://github.com/cinchrb/cinch/blob/master/lib/cinch/bot.rb#L188中定义.

代码可以改为这样写:

bot = Cinch::Bot.new
bot.on :channel do |m|
  ...
end
Run Code Online (Sandbox Code Playgroud)