Я не совсем уверен, что должен делать js_funct
. res
в нем совершенно бесполезно:
def js_funct
if @flipped_on
res = my_funct
if res
return res.length
end
end
return nil
end
Вы можете просто сказать my_funct.length
и получить длину того, что возвращает функция my_funct
.
Но, похоже, вас смущает следующее: в Ruby функции (мы называем их методами, поскольку они всегда принадлежат объекту) не являются объектами первого класса. Поэтому вы не можете сказать res = my_funct
, надеясь, что вы назначите функцию переменной, как в JavaScript. В Ruby эта строка сначала выполнит метод my_funct
и поместит результат в переменную с именем res
.
Если вы хотите проверить, определен ли метод, вы можете, например, использовать метод Object#respond_to?
.
Если вы хотите обернуть ваш метод в объект для его передачи, вы должны использовать метод Object#method
. Но в Ruby более распространено передавать блоки (замыкания), чем целые методы . Вы на самом деле делаете это каждый раз, когда используете map
, each
или другие распространенные методы Ruby.
Если вы хотите увидеть, как конкретная задача кодируется в Ruby, вы должны сказать, что это за задача. Ваш пример этого не говорит.