3

我是一名学习 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

有人可以解释吗?

4

2 回答 2

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
于 2013-08-14T04:27:21.650 回答
1

on 是一种方法Cinch.Bothttps ://github.com/cinchrb/cinch/blob/master/lib/cinch/bot.rb#L188

于 2013-08-14T04:26:28.530 回答