Значение 3 не передается процессу, поскольку вы не передаете s
в foo
Вы, вероятно, хотели написать
foo {|x| puts "foo: #{s.call(x)}"}
или
puts "foo: #{foo(&s)}"
Кроме того, они эквивалентны:
def foo_1(x, &a)
puts a.call(x)
end
def foo_2(x)
puts yield(x)
end
foo_1(5, &s) #=> 10
foo_2(5, &s) #=> 10