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分配的(因此是“静态的”),但是这两者几乎就是“方法”的定义。 我们已经有了一个完美的名字为这个结构:一个程序 。