Ответ 1
Чтобы объявить статический метод, напишите...
def self.checkPings
# A static method
end
... или...
class Myclass extend self
def checkPings
# Its static method
end
end
Я хочу, чтобы метод выполнялся каждые 5 минут, я реализовал каждый раз для ruby (cron). Но это не работает. Я думаю, что мой метод недоступен.
Метод, который я хочу выполнить, находится в классе. Я думаю, что мне нужно сделать этот метод статическим, чтобы я мог получить доступ к нему с помощью 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
to
class MyModel
def self.checkPings
end
end
Обратите внимание, что к имени метода добавляется self.
def checkPings
- это метод экземпляра для класса MyModel, тогда как def self.checkPings
- метод класса.
Вместо расширения self
для всего класса вы можете создать блок, который простирается от себя и определять ваши статические методы внутри.
вы сделали бы что-то вроде этого:
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 все методы являются динамическими. В Ruby существует только один вид метода: динамические методы экземпляра.
Действительно, термин статический метод в любом случае является неправильным. Статический метод - это метод, который не связан с каким-либо объектом и который не отправляется динамически (отсюда "статический" ), но эти два являются в значительной степени определением того, что означает "метод". У нас уже есть хорошее имя для этой конструкции: процедура.