Как можно использовать точки в именах функций Ruby? Есть класс с обработкой method_missing(). Я хочу передать этому классу название функции типа: func.name(agrs). И потом обработать эту функцию в моем классе.
В Ruby можно использовать точки в именах функций, но обычно это не принято делать из-за того, что это может привести к путанице и нечитаемому коду. Однако, если вам действительно нужно передавать имя функции с точкой как аргумент, то это можно сделать следующим образом:
class MyClass def method_missing(method_name, *args) method_name_parts = method_name.to_s.split('.') actual_method = method_name_parts[0] additional_arg = method_name_parts[1] if respond_to?(actual_method) send(actual_method, additional_arg, *args) else super end end def name(arg) puts "Hello, #{arg}!" end end obj = MyClass.new obj.method_missing(:name_dot_hello, "Alice") # => Hello, Alice!
В данном примере функция method_missing() принимает переданное имя функции с точкой, делит его на части и вызывает соответствующий метод name() с переданным аргументом.
Таким образом, вы можете передать имя функции с точкой в вашем классе и обработать его при помощи method_missing().
В Ruby можно использовать точки в именах функций, но обычно это не принято делать из-за того, что это может привести к путанице и нечитаемому коду. Однако, если вам действительно нужно передавать имя функции с точкой как аргумент, то это можно сделать следующим образом:
class MyClassdef method_missing(method_name, *args)
method_name_parts = method_name.to_s.split('.')
actual_method = method_name_parts[0]
additional_arg = method_name_parts[1]
if respond_to?(actual_method)
send(actual_method, additional_arg, *args)
else
super
end
end
def name(arg)
puts "Hello, #{arg}!"
end
end
obj = MyClass.new
obj.method_missing(:name_dot_hello, "Alice")
# => Hello, Alice!
В данном примере функция method_missing() принимает переданное имя функции с точкой, делит его на части и вызывает соответствующий метод name() с переданным аргументом.
Таким образом, вы можете передать имя функции с точкой в вашем классе и обработать его при помощи method_missing().