s = Proc.new {|x|x*2}
puts "proc:" + (s.call(5)).to_s
def foo(&a)
a.call(5)
end
foo{|x| puts "foo:" + (x*3).to_s}
L'exécution de ce programme produit la sortie:Comment les arguments sont-ils transmis à procs?
proc:10
foo:15
Comment la valeur 3 du bloc foo être transmis au proc? Je m'y attendais cette sortie:
proc:10
foo:10
Le proc est toujours appelé à la valeur 5 comme argument parce que foo est défini comme:
a.call(5)
Pourquoi est-foo 15 dans la sortie?
Quand j'appelle foo, ce qui arrive à a.call (5)? C'est ignoré? Je pensais qu'il serait appelé et la sortie serait 10. – uzo
@uzo: 'a' est le bloc' {| x | met "foo:" + (x * 3) .to_s} '. Ce bloc multiplie l'argument times 3. Donc quand vous l'appelez avec l'argument 5, vous obtenez 5 * 3, ce qui est 15. – Chuck
Bien sûr, il n'est pas ignoré. a est appelé avec l'argument 5. a puis sort 5 * 3, soit 15. – sepp2k