¿Cómo paso una función, a
, a la función, b
, y tengo b
llamada a
en Perl?Pasar un Objeto de Función y Llamarlo
Respuesta
Aquí hay un script completo y operativo que demuestra lo que está preguntando.
sub a { print "Hello World!\n"; }
sub b {
my $func = $_[0];
$func->();
}
b(\&a);
He aquí una explicación: se toma una referencia a la función a
diciendo \&a
. En ese punto, tienes una referencia de función; mientras que normalmente una función sería llamado diciendo func()
se llama a una función de referencia diciendo $func->()
El acuerdo ->
sintaxis con otras referencias también. Por ejemplo, he aquí un ejemplo de hacer frente a la matriz y croquetas de referencias:
sub f {
my ($aref, $href) = @_;
print "Here's an array reference: $aref->[0]\n"; # prints 5
print "Here's a hash ref: $href->{hello}\n"; # prints "world"
}
my @a = (5, 6, 7);
my %h = (hello=>"world", goodbye=>"girl");
f(\@a, \%h);
Puede tener acceso a subrutinas referencias como \&my_method
en Perl, y llamar a esas referencias con $myref->();
. Pruebe esto:
perl -e'sub a { print "foo in a"; }; sub b { shift->(); }; b(\&a);'
¡Buena suerte!
¿Qué pasa si paso la función? como parte de un hash, ¿se vería así? $ args {function} ->(); – Kys
Siguiendo con el ejemplo de Eli Courtwright: Si sólo utiliza la primera función una vez, también se podría llamar b
con una función anónima, así:
b(sub { print "Hello World\n"; });
No se puede pasar de una función a otra función directamente. En cambio, pasa una referencia a una función. Para llamar a la función, desreferenciarla (como una REF CODE) usando ->()
;
sub a { print @_ }
sub b {
my $f = shift; # assuming that $f is a function reference...
$f->(@_); # call it with the remaining arguments
}
b(\&a, "hello, world!"); # prints "hello, world!"
Perl no tiene semántica de paso por nombre, pero puede emularlas usando un hash. El método para llamar a la función es el mismo. Usted lo desreferencia.
sub a { print @_ }
sub b {
my %arg = @_;
$arg{function}->(@{$arg{arguments}});
}
b(function => \&a, arguments => ["hello, world!"]);
ObPerl6: Perl 6 tendrá una semántica pass-by-name.
- 1. ¿Cómo pasar un objeto jquery a la función?
- 2. Haciendo DLL Fortran y llamarlo desde C#
- 3. ¿Es posible envolver un entero y llamarlo como un entero?
- 4. ¿Se debe definir una función Javascript antes de llamarlo?
- 5. ¿Cómo puedo definir una función C en un archivo y luego llamarlo desde otro?
- 6. javascript: función y objeto ...?
- 7. pasar un hash de una función (* args) y su significado
- 8. Convertir el puntero del método a entero, y luego llamarlo
- 9. Cómo pasar un solo objeto [] a un objeto params []
- 10. Cómo pasar objeto cin o ifstream como la función argumento
- 11. ¿Cómo pasar el contexto del objeto a una función anónima?
- 12. pasar la función en json y ejecutar
- 13. ¿Cómo pasar parámetros en eval en un formulario de objeto?
- 14. Obtener objeto de función para las funciones int() y float()
- 15. ¿Qué argumentos debo pasar a una función para realizar una construcción implícita de un objeto?
- 16. ¿Cómo pasar un objeto de evento a una función en Javascript?
- 17. ¿Cómo pasar un vector a una función?
- 18. Funciones de llamada desde la función dentro de un objeto (literal del objeto)
- 19. ¿Cómo pasar un archivo a una función?
- 20. javascript: pasar un objeto como argumento a una función onclick dentro de la cadena
- 21. ¿Puedo pasar un tipo de objeto a un método genérico?
- 22. ¿Pasar un operador a una función?
- 23. ¿Puedo pasar un patrón a una función?
- 24. Al pasar un objeto de excepción a un servicio web
- 25. python 3: random.seed(): ¿dónde llamarlo?
- 26. Pasar un parámetro opcional en PHP Función
- 27. ¿Cuál es la diferencia entre un objeto de función y un objeto invocable?
- 28. ¿Pasar el objeto como parámetro a la función del constructor y copiar sus propiedades al nuevo objeto?
- 29. ¿Función predeterminada en un objeto?
- 30. Pasar un objeto como parámetro a un servicio de Windows
¿Qué pasaría si estuviera pasando la función como parte de un hash, entonces se vería así? $ args {function} ->(); – Kys
He agregado ejemplos para referencias de matrices y hash. –
Pero ¿y si era esto: f (función => \ &func); luego en la función, f, ¿sería este sub f { $ args {función} ->(); } – Kys