Size: a a a

2019 December 17

IL

Ivan Leonov in Ruby School .us
В данном контексте yield - это вот этот puts
источник

AP

Anton Plugin in Ruby School .us
Чувствую некое непонимание концепции.
Предлагаю почитать теорию https://medium.com/rubycademy/the-yield-keyword-603a850b8921
источник

IL

Ivan Leonov in Ruby School .us
Если говорить грубо, то на место yield просто подставляется код из блока в момент выполнения. Но это достаточно грубое сравнение
источник

IL

Ivan Leonov in Ruby School .us
Anton Plugin
Чувствую некое непонимание концепции.
Предлагаю почитать теорию https://medium.com/rubycademy/the-yield-keyword-603a850b8921
источник

c

cyrkl in Ruby School .us
Ivan Leonov
Если говорить грубо, то на место yield просто подставляется код из блока в момент выполнения. Но это достаточно грубое сравнение
Вот!  а блок где?
источник

VV

Vadim Venediktov in Ruby School .us
cyrkl
Вот!  а блок где?
По умолчанию каждый метод в руби принимает блок посл. параметром
источник

AP

Anton Plugin in Ruby School .us
Когда ты вызываешь фукнцию и передаёшь ей блок.
func(a) { puts "Hello" }
Очень грубо говоря внутри функции ты получаешь:
def func(a, *block_ptr)
Где block_ptr - указатель на анонимную функцию, которая и представляет собой блок, объявленный при вызове функции func.
источник

VV

Vadim Venediktov in Ruby School .us
Можете написать ... def method(..., &block)
источник

AP

Anton Plugin in Ruby School .us
yield вызывает block неявно
источник

c

cyrkl in Ruby School .us
Vadim Venediktov
Можете написать ... def method(..., &block)
а потом распарсить блок внутри?
источник

VV

Vadim Venediktov in Ruby School .us
cyrkl
а потом распарсить блок внутри?
источник

AP

Anton Plugin in Ruby School .us
Если ловить block в методе явно:
def method(..., &block)
  block.call
end
источник

VV

Vadim Venediktov in Ruby School .us
Ivan Leonov

def fuck
 yield
end

Соответственно, вызов такой
fuck { puts 'hell yeah' }
Вот вам пример написали хороший, запустите
источник

VV

Vadim Venediktov in Ruby School .us
Anton Plugin
Если ловить block в методе явно:
def method(..., &block)
  block.call
end
Или так
источник

c

cyrkl in Ruby School .us
Anton Plugin
Если ловить block в методе явно:
def method(..., &block)
  block.call
end
во! то что надо!
источник

IL

Ivan Leonov in Ruby School .us
Anton Plugin
Если ловить block в методе явно:
def method(..., &block)
  block.call
end
источник

IL

Ivan Leonov in Ruby School .us
cyrkl
во! то что надо!
Но имейте ввиду, что в реальном уже чаще будете видеть yield
источник

c

cyrkl in Ruby School .us
Anton Plugin
Если ловить block в методе явно:
def method(..., &block)
  block.call
end
А так можно?
def method(..., &block)
  self.fuck(x)
  block.call
  self.fuck(y)
end
источник

AP

Anton Plugin in Ruby School .us
Метод, который вызывает переданный ему блок- такой-же метод как остальные, так что да.
источник

VV

Vadim Venediktov in Ruby School .us
Ivan Leonov
Но имейте ввиду, что в реальном уже чаще будете видеть yield
И отступы 2 пробела :)
источник