[plt-scheme] Field names in the class system
Are you sure? Just trying to run this code
(class object%
(init ([name other-name] 'default))
(define name other-name))
causes the error
class: duplicate declared identifier in: name
Todd
On Sat, Aug 1, 2009 at 11:08 AM, Carl Eastlund<carl.eastlund at gmail.com> wrote:
> If you want a private field with the same name as an initialization
> argument, you want to give the initialization argument a different
> internal name. It should work something like this:
>
> (class
> ...
> (init ([name other-name] default))
> (define name other-name)
> ...)
>
> You can leave out the default value, but you still need the extra
> layer of parentheses that distinguish other-name from default.
>
> --Carl
>
> On Sat, Aug 1, 2009 at 11:04 AM, Todd O'Bryan<toddobryan at gmail.com> wrote:
>> But doesn't that make the field public? Is there any way to do it
>> without making the field public?
>>
>> On Sat, Aug 1, 2009 at 10:18 AM, Matthias Felleisen<matthias at ccs.neu.edu> wrote:
>>>
>>> Use init-field.
>>>
>>> On Aug 1, 2009, at 9:59 AM, Todd O'Bryan wrote:
>>>
>>>> How do I get the names I use when passing in values with new to match
>>>> the internal field names?
>>>>
>>>> In other words, I'd like to be able to do
>>>>
>>>> (new foo% [name "blah"])
>>>>
>>>> and then assign the field name the value "blah" inside the class.
>>>>
>>>> My first attempt was:
>>>>
>>>> (define foo%
>>>> (class object%
>>>> (init name)
>>>>
>>>> (super-new)
>>>>
>>>> (define name name))) ; doesn't work because name is already defined
>>>>
>>>> I tried using the maybe-renamed construct, but the name is backwards
>>>> from what I expected:
>>>>
>>>> (define foo%
>>>> (class object%
>>>> (init (field-name name))
>>>> ...)
>>>>
>>>> means that I have to do (new foo% [field-name "blah"]), rather than
>>>> [name "blah"].
>>>>
>>>> I'm sure I'm just missing something obvious...
>>>>
>>>> Todd
>