Blocks and Procs

If a function/method uses a block, why would I ever use the implicit ‘yield’ syntax instead of explicitly pass the block as the final ampersand argument?

e.g.

Why would I do:-

def foo(x)
  yield x
end

Instead of:-

def foo(x, &block)
  block.call x
end

Doesn’t the implicit syntax hide the fact that the function/method allows a block from the caller, meaning that the only way to discover it is to read the code?!? What am I missing?