Deutsch   English   Français   Italiano  
<v9reuh$23e4r$3@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!feeds.phibee-telecom.net!2.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Lawrence D'Oliveiro <ldo@nz.invalid>
Newsgroups: comp.lang.c
Subject: Re: When Is A High/Low-Level Language Not A High/Low-Level Language?
Date: Sun, 18 Aug 2024 00:23:45 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 75
Message-ID: <v9reuh$23e4r$3@dont-email.me>
References: <v9mppi$1b5hk$1@dont-email.me> <v9ptfh$1s7lo$1@dont-email.me>
	<v9r76l$2289h$5@dont-email.me> <v9rb8f$22uj8$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 18 Aug 2024 02:23:45 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="777ed5111cfc3eff7ef4f95b77dfec54";
	logging-data="2209947"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/6QmrFXjkcvBp1iaaaWBLN"
User-Agent: Pan/0.159 (Vovchansk; )
Cancel-Lock: sha1:hMTI+ngz4Cuiop7DYWvFOEYzfPY=
Bytes: 3519

On Sun, 18 Aug 2024 00:20:49 +0100, Bart wrote:

> On 17/08/2024 23:11, Lawrence D'Oliveiro wrote:
>>
>> On Sat, 17 Aug 2024 11:19:30 +0100, Bart wrote:
>> 
>>> ... what does this have to do with C, or anything at all?
>> 
>> C is supposed to be the epitome of the low-level language that can do
>> bit-fiddling and unsafe type conversions and the like. This is an
>> example of an unsafe type conversion (offering a typesafe interface to
>> the caller, of course) done dynamically, in a language which is
>> generally considered to be “higher-level” than C.
>> 
>> In sum: types as first-class objects + low-level bit-fiddling = a
>> combination unavailable in traditional “low-level” languages like C.
>> 
>>> Apart from being an apallingly bit of code.
>> 
>> How would you it less “apallingly”?
>> 
>> (This sentence no verb. Also speling.)
> 
> It's an adverb. Although there should have been two P's.

Still not answering the question.

>>> However I can't see the switch-expression; there is a Dict
>>> constructor, where all elements are evaluated, not just the one
>>> selected. That is not how 'switch' works.
>> 
>> How does a switch-expression work, then? Can you give us an example?
> 
> Take this Python code that has a similar dict constructor:
> 
>    def prnt(x): print(x); return len(x)
> 
>    i=3 a={1:prnt("One"), 2:prnt("Two"), 3:prnt("Three")}[i]
> 
>    print(a)
> 
> It selects the third element keyed with '3', but the output is:
> 
>    One Two Three 5
> 
> So 'prnt' has been called 3 times instance of just once. (Also using a
> non-existent key gives an error.)

So do it this way:

    a = \
        {
            1 : lambda : prnt("One"),
            2 : lambda : prnt("Two"),
            3 : lambda : prnt("Three"),
        }[i]()

> (Also using a non-existent key gives an error.)

Want a default case for your switch? Easy:

    a = \
        {
            1 : lambda : prnt("One"),
            2 : lambda : prnt("Two"),
            3 : lambda : prnt("Three"),
        }.get(i, lambda : «default»)()

You think this is somehow new to me? It’s all covered here:
<https://gitlab.com/ldo/python_topics_notebooks/-/blob/master/Simple%20Code-Shortening%20Idioms.ipynb>

> The equivalent using 'switch' in one of my languages ...

If you want an unlabelled switch, that’s covered in the above
notebook, too.