Suponga que una función bind
tiene un argumento etiquetado, argumentos opcionales y argumentos no etiquetados, y desea definir un método m
que aplica los argumentos no etiquetados de bind
y devuelve la función parcialmente aplicada, de modo que el usuario de m
puede aplicar los argumentos etiquetados u opcionales de bind
. ¿Cómo haces esto? Simplemente escribir method m = bind a b [...] z
hace que el compilador piense que se omiten los argumentos opcionales.Cómo curry una función w.r.t. sus argumentos opcionales en OCaml
Respuesta
La posición de los argumentos opcionales (en la declaración de función o tipo de función) es importante: solo se aplican implícitamente cuando se aplica el siguiente argumento no opcional.
Si desea que la aplicación parcial de un parámetro a p
se aplica un parámetro opcional ?o
, poner ?o
después p
en la declaración de la función.
contraste
# let f ?o p ~z =();;
val f : ?o:'a -> 'b -> z:'c -> unit = <fun>
# f 1;;
- : z:'_a -> unit = <fun> (* ?o applied *)
con:
# let f p ?o ~z =();;
val f : 'a -> ?o:'b -> z:'c -> unit = <fun>
# f 1;;
- : ?o:'_a -> z:'_b -> unit = <fun> (* ?o not applied *)
Si no desea cambiar el orden de definición, o quiere parcialmente aplican todos los parámetros no opcionales, que necesita para capturar de forma explícita los parámetros opcionales que se pueden transmitir de forma implícita:
# (fun ?o() -> f ?o 1 ~z:2);;
- : ?o:'a -> unit -> unit = <fun>
En caso de que no estaban familiarizados con ella, la sintaxis ?o
en el sitio llamado es muy útil para esto: se necesita un 'a option
y hace lo correcto a transparente pasar un argumento opcional, tanto si se aplica o no, a la Llamado
he añadido un último ()
parámetro para preservar la propiedad de que no es al menos un argumento que no es opcional después de los opcionales. Es posible no hacer esto, pero se vuelve complicado y no es aconsejable.
- 1. ¿Cómo omitiría argumentos opcionales en una llamada a función?
- 2. javascript argumentos opcionales en función de
- 3. Crear una función con argumentos opcionales en MySQL
- 4. ¿Cómo creo una función de Python con argumentos opcionales?
- 5. Cómo curry una función en Scala
- 6. Cómo pasar los argumentos opcionales
- 7. Argumentos opcionales en defgeneric?
- 8. argumentos opcionales en Haskell
- 9. ¿Cómo se crean argumentos opcionales en php?
- 10. Cómo crear la función elisp interactiva con argumentos opcionales
- 11. ¿Cómo usar argumentos opcionales en defprotocol?
- 12. variadic curry función suma
- 13. En OCaml, ¿cuál es la forma canónica de comparar contra múltiples argumentos de una función?
- 14. LaTeX Argumentos opcionales
- 15. cómo implementar curry (función parcial) en ruby
- 16. función de curry JavaScript
- 17. Probando argumentos opcionales en PHP
- 18. Propagating argumentos opcionales
- 19. Argumentos opcionales en WHERE Cláusula
- 20. llamados argumentos opcionales PHP?
- 21. ignorar función en OCaml
- 22. Argumentos con nombre opcionales en Mathematica
- 23. ¿Cómo puedo tener argumentos opcionales Y argumentos de palabras clave para la misma función?
- 24. OCaml: valores predeterminados para los argumentos de función?
- 25. En Apps Script, Cómo incluir argumentos opcionales en funciones personalizadas
- 26. ¿Cómo puedo pasar argumentos opcionales en vista de Django
- 27. Groovy Closure con argumentos opcionales
- 28. ¿Cómo maneja printf sus argumentos?
- 29. Métodos genéricos y argumentos opcionales
- 30. Argumentos opcionales de C++/CLI
En el último párrafo, ¿es necesario el último() parámetro incluso en la definición del método? – Pteromys
Bueno, nunca es obligatorio, pero recibirá una advertencia y no tendrá forma de disparar implícitamente (ya que no puede "pasar el siguiente argumento no opcional" para esto), por lo que será como un no opcional parámetro de tipo 'opción'. – gasche