Hi, Romano,

Romano Paolo Tenca wrote:
> 
> You can do also:
> 
>  name: "Guido"
>  print favoriteLanguage/:name
> 
> The path evaluator make an implict select on block and hash.
> But the problem here is that if a language called "Guido" appears
> before the user "Guido" then fails...
>

Given

    >> name: "Perl"
    == "Perl"
    >> favoriteLanguage/:name
    == "Carl"

I think I'd say "gives an unexpected result" rather than "fails",
since there's not explicit error involved.

>
> A fetch based on this:
> 
>     fetch: func [k [string!]] [data/:k ]
> 
> but if k is not found fetch will fire an error (Invalid path value).
> 
> It is possible to do also a change, if the index is a word  (it
> seems to me a strange thing - what do you think?):
> 
>    data: [guido "Rebol"]
>    change: func [k [word!] value] [k: to-set-word k data/:k :value]
>    change 'guido "What else?"
> 

There are a number of "strange things" in the use of paths; using

    classSize:
    [   "freshman"  166
        "sophomore" 141
        "junior"    122
        "senior"    131
    ]

we can say

    >> select classSize "junior"
    == 122
    >> select classSize "graduate"
    == none

compared with

    >> x: "junior"     classSize/:x
    == 122
    >> x: "graduate"   classSize/:x
    ** Script Error: Invalid path value: graduate
    ** Where: halt-view
    ** Near: classSize/:x

But when using

    classSize:
    [    9 166
        10 141
        11 122
        12 131
    ]

we find

    >> select classSize 7
    == none
    >> select classSize 9
    == 166

compared with

    >> x: 7   classSize/:x
    == 12
    >> x: 9   classSize/:x
    == none

and

    >> pick classSize 7
    == 12
    >> pick classSize 9
    == none

I don't understand the purpose of the inconsistencies:

1)  when to generate an error vs. returning NONE to indicate
    data-not-found, and

2)  the fact that /: performs access-by-position or access-by-key
    depending on the type of the second word's value.

Multiple ways to do not-quite-the-same-things seem to be an
invitation to confusion.

-jn-
-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to