0

我目前在Cloud9上使用 XMPP4R 。

conference.on_message {|time, nick, text|
     case text
        when /regex/i
            #Same Command as on_private_message
        end
     end
}

conference.on_private_message {|time,nick, text|
     case text
        when /regex/i
            #Same Command as on_message
        end
     end
}

conference.on_message是会议的聊天消息,conference.on_private_message是会议的私信聊天。

我想让 on_message 和 on_private_message 都作为 1 而不是上面显示的 2 起作用。

我尝试了这样的事情(如下),但它只有效conference.on_private_message。我怎样才能使它成为可能?

(conference.on_message || conference.on_private_message) { |time, nick, text|
    case text
        when /regex/i
            #Same Command on both on_message and on_private_message
        end
     end  
}
4

1 回答 1

1

据我了解,目的是干燥您的代码。可能值得创建一个 Proc 对象并将其发送给这两个函数。

proc = Proc.new { |time, nick, text|
case text
    when /regex/i
        #Same Command on both on_message and on_private_message
    end
 end  
}
conference.on_message(&proc)
conference.on_private_message(&proc)

您也可以尝试使用#send 方法。

[:on_message, :on_private_message].each { |m| conference.send(m, &proc) }
于 2017-03-22T18:51:37.493 回答