to_proc

Procオブジェクトでなくても、to_procメソッドを持っているオブジェクトなら、&で修飾した引数としてメソッドに渡すことができます。

class Rubyco
  def to_proc
    proc {
      puts "Hello"
    }
  end
end

def rubyco(&block)
  block.call
end

rubyco(&Rubyco.new)     #=> Hello

無理矢理trueをブロック仕立てにしたりして。

def true.to_proc
  proc {
    puts "Hello"
  }
end

def rubyco(&block)
  block.call
end

rubyco(&true)               #=> Hello

無理矢理nilをブロック仕立てにしたりして…ってあれれ?callがないって言われちゃいました。

def nil.to_proc
  proc {
    puts "Hello"
  }
end

def rubyco(&block)
  block.call            #=> undefined method `call' for nil:NilClass (NoMethodError)
end

rubyco(&nil)

nilはなぜかto_procだけでは駄目みたいですね。よくわかりませんが。
追記:ささださんからコメント。そうか、そうですね。nilはブロックを渡さないことを示しているんですものね。おもしろいのは、特異メソッドでnilにcallを定義すると呼べてしまうこと。このとき、to_procが定義されていなくてもよい。

def nil.call
  puts "Hello"
end

def rubyco(&block)
  block.call
end

rubyco(&nil)        #=> Hello