Ruby on rails – 静态方法

我想要一个方法每5分钟执行一次,我实现了每当ruby(克朗)。 但它不起作用。 我认为我的方法是不可访问的。 我想要执行的方法位于一个类中。 我想我必须使这个方法是静态的,所以我可以通过MyClass.MyMethod访问它。 但是我找不到正确的语法,或者我正在寻找错误的地方。

Schedule.rb

 every 5.minutes do runner "Ping.checkPings" end 

Ping.rb

 def checkPings gate = Net::Ping::External.new("10.10.1.1") @monitor_ping = Ping.new() if gate.ping? MonitorPing.WAN = true else MonitorPing.WAN = false end @monitor_ping.save end 

要声明一个静态方法,写…

 def self.checkPings # A static method end 

… 要么 …

 class Myclass extend self def checkPings # Its static method end end 

你可以像这样在Ruby中使用静态方法:

 class MyModel def self.do_something puts "this is a static method" end end MyModel.do_something # => "this is a static method" MyModel::do_something # => "this is a static method" 

另外请注意,您的方法使用了错误的命名约定。 它应该是check_pings ,但是这不会影响你的代码是否工作,它只是ruby样式。

更改您的代码

 class MyModel def checkPings end end 

 class MyModel def self.checkPings end end 

注意有自己添加到方法名称。

def checkPings是类MyModel的一个实例方法,而def self.checkPings是一个类方法。

你可以创build一个自扩展的块,并在里面定义你的静态方法,而不是为整个类扩展自我。

你会做这样的事情:

 class << self #define static methods here end 

所以在你的例子中,你会做这样的事情:

 class Ping class << self def checkPings #do you ping code here # checkPings is a static method end end end 

你可以这样调用它: Ping.checkPings

你不能在Ruby中有静态方法。 在Ruby中,所有的方法都是dynamic的。 Ruby中只有一种方法:dynamic实例方法。

实际上, 静态方法这个术语无论如何都是一个误用。 静态方法是一种不与任何对象关联的方法,它不是dynamic分配的(因此是“静态的”),但是这两者几乎就是“方法”的定义。 我们已经有了一个完美的名字为这个结构:一个程序