В python существует ключевое слово pass
для определения пустой функции, условия, цикла,...
Есть ли что-то подобное для Ruby?
Пример Python:
def some_function():
# do nothing
pass
В python существует ключевое слово pass
для определения пустой функции, условия, цикла,...
Есть ли что-то подобное для Ruby?
Пример Python:
def some_function():
# do nothing
pass
У вас всегда есть операторы end
, поэтому pass
не требуется.
Пример Ruby:
def some_function()
# do nothing
end
Нет, такого нет в Ruby. Если вам нужен пустой блок, метод, модуль, класс и т.д., Просто напишите пустой блок:
def some_method
end
Что это.
В Python каждый блок должен содержать хотя бы один оператор, поэтому вам нужен "поддельный" оператор no-op. Ruby не имеет операторов, он имеет только выражения, и вполне законно, чтобы блок содержал нулевые выражения.
Одиночные функции и классы
def name ; end
class Name ; end
отлично работает для псевдокода.
Как было сказано до того, как все в ruby будет выражением , поэтому оставить его пустым.
def name
end
class Name
end
Рубиновая альтернатива для программистов-питонов, которые любят ключевое слово pass
def pass
end
# OR
def pass; end
Обратите внимание, что это бесполезно делать в Ruby, поскольку оно позволяет использовать пустые методы, но если вы заинтересованы в pass
, это самая простая и чистая альтернатива.
и теперь вы можете использовать эту функцию внутри любого блока, и она будет работать одинаково.
def name
pass
end
# OR
class Name
pass
end
Имейте в виду, что pass - это функция, которая возвращается, поэтому вам решать, как вы можете ее использовать.
nil
, вероятно, эквивалентен ему:
def some_function
nil
end
Один из способов, в котором он в основном полезен, - это когда ничего не спасает, но ничего не делает:
Process.kill('CONT', pid) rescue nil
Вместо того, чтобы делать
begin
Process.kill('CONT')
rescue
end
И это приведет к синтаксической ошибке:
> throw :x rescue
SyntaxError: (irb):19: syntax error, unexpected end-of-input
from /usr/bin/irb:11:in `<main>'
Примечания:
def some_function; end; some_function
будет возвращаться nil
.
def a; :b; begin; throw :x; rescue; end; end; a;
также будет возвращать nil
.
Если вы хотите свободно использовать его с любым количеством аргументов, вы должны иметь небольшой трюк в аргументах:
def gobble *args, ≺ end
Как говорили другие, в Ruby вы можете просто оставить тело метода пустым. Однако это может оказаться немного отличающимся от того, что Python выполняет с помощью pass
.
В Ruby все является объектом. Отсутствие значения, которое некоторые языки программирования указывают с помощью null
или nil
, фактически является объектом NilClass
в Ruby.
Рассмотрим следующий пример (в irb
):
class A
def no_op
end
end
A.new.no_op
# => nil
A.new.no_op.class
# => NilClass
A.new.no_op.nil?
# => true
Здесь Ruby Документация NilClass для справки.
Я считаю, что Python pass
используется в основном для преодоления синтаксических ограничений языка (отступов), хотя я не так разбираюсь в Python.