Function prototype: Difference between revisions
Content added Content deleted
(Added Racket code) |
|||
Line 225: | Line 225: | ||
A routine may make a named parameter mandatory using exclamation mark. (This is more useful in multi subs than in stubs though.) |
A routine may make a named parameter mandatory using exclamation mark. (This is more useful in multi subs than in stubs though.) |
||
<lang perl6>sub foo ($, :$option! --> Int) {...}</lang> |
<lang perl6>sub foo ($, :$option! --> Int) {...}</lang> |
||
=={{header|Racket}}== |
|||
Most of the points are covered in this program |
|||
<lang Racket>#lang racket |
|||
(define (no-arg) (void)) |
|||
(define (two-args a b) (void)) ;arguments are always named |
|||
(define (varargs . args) (void)) ;the extra arguments are stored in a list |
|||
(define (varargs2 a . args) (void)) ;one obligatory argument and the rest are contained in the list |
|||
(define (optional-arg (a 5)) (void)) ;a defaults to 5</lang> |
|||
(void) is a function that returns nothing, so this are prototypes that do nothing. |
|||
Although standard Racket doesn't allow type declarations, it allows contracts, so we can add this to the previous declarations |
|||
<lang Racket>(provide (contract-out |
|||
[two-args (integer? integer? . -> . any)]))</lang> |
|||
then any module that imports the function can only pass integers to two-args. |
|||
Another way is using the typed/racket language, like this |
|||
<lang Racket>#lang typed/racket |
|||
(: two-args (Integer Integer -> Any)) |
|||
(define (two-args a b) (void))</lang> |
|||
{{omit from|AutoHotkey}} |
{{omit from|AutoHotkey}} |