Opened 10 years ago
Last modified 8 years ago
#1235 new defect
Issue with parameters
| Reported by: | Mario Domenech Goulart | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | someday |
| Component: | core libraries | Version: | 4.10.x |
| Keywords: | parameters, make-parameter | Cc: | initerm@… |
| Estimated difficulty: | medium |
Description
Reported by Joo ChurlSoo via e-mail:
CHICKEN (c) 2008-2015, The CHICKEN Team (c) 2000-2007, Felix L. Winkelmann Version 4.10.0 (rev b259631) windows-mingw32-x86 [ manyargs dload ptables ] compiled 2015-08-04 on yves.more-magic.net (Linux) #;1> (define a (make-parameter 1)) #;2> (a 10 23) 10 #;3> (a) 10 #;4> (define b (make-parameter 2 number->string)) #;5> (b 20 23) 20 #;6> (b) 20 #;7> (b 20) "20" #;8> (b) "20"
Change History (4)
comment:1 by , 10 years ago
comment:2 by , 9 years ago
| Estimated difficulty: | → medium |
|---|
comment:3 by , 8 years ago
The most problematic bit of this ticket (that of (b) returning 20 rather than "20" in command #;6) is no longer an issue. Is this worth keeping open?
comment:4 by , 8 years ago
We just discussed what to do: we can change it to be non-booleans, use distinct values to indicate whether we want to convert (and reject anything else), which makes it nigh-impossible for the user to call it with that.
Note:
See TracTickets
for help on using tickets.

This happens because parameterize expands to a call that passes #t or #f as a second argument to the parameter procedure, depending on whether the converter needs to be invoked.
We can never truly hide this, because the macro expands to code at the call site, which means whatever it expands to needs to be accessible to the user.
See also my suggestion in #1227 to make the second argument a keyword. This would make the problem less likely.