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

时间:2013-08-14 04:13:26

标签: 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

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:5)

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

https://github.com/cinchrb/cinch/blob/master/lib/cinch/bot.rb#L188中定义了on

代码可以改为:

bot = Cinch::Bot.new
bot.on :channel do |m|
  ...
end

答案 1 :(得分:1)