Подтвердить что ты не робот

Эквивалент "прохода" в Ruby

В python существует ключевое слово pass для определения пустой функции, условия, цикла,... Есть ли что-то подобное для Ruby?

Пример Python:

def some_function():
    # do nothing
    pass
4b9b3361

Ответ 1

У вас всегда есть операторы end, поэтому pass не требуется.

Пример Ruby:

def some_function()
    # do nothing
end

Ответ 2

Нет, такого нет в Ruby. Если вам нужен пустой блок, метод, модуль, класс и т.д., Просто напишите пустой блок:

def some_method
end

Что это.

В Python каждый блок должен содержать хотя бы один оператор, поэтому вам нужен "поддельный" оператор no-op. Ruby не имеет операторов, он имеет только выражения, и вполне законно, чтобы блок содержал нулевые выражения.

Ответ 3

Одиночные функции и классы

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 - это функция, которая возвращается, поэтому вам решать, как вы можете ее использовать.

Ответ 4

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.

Ответ 5

Если вы хотите свободно использовать его с любым количеством аргументов, вы должны иметь небольшой трюк в аргументах:

def gobble *args, &pr; end

Ответ 6

Как говорили другие, в 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.