Kedven értékelése érdekében a tagállamok közötti könyörgésekből garantált?

szavazat
-2

Tegyük fel, hogy van egy struct állami és néhány tag funkcióját, hogy struct. Tegyük fel, hogy a struct elem visszatér egy példányát saját típusát, és arra kérem, hogy további funkciók például, és adja át a hívás eredményeit néhány más tagja a kezdeti fokon érvként. A rendelést hívása az első hívása, és az argumentum könyörgése, garantált?

(Ez a minta jön ki sokat, ha próbál építeni „építő” típusú objektumok, amelyek valamilyen belső állapot, mint egy kifejezés verem.)

package main

import (
    fmt
)

type q struct {
    val int
}

func (s *q) getVal() int {
    return s.val
}

func (s *q) a() *q {
    s.val += 1
    return s
}

func (s *q) b(i int) int {
    return i + s.val
}

func main() {
    s := &q{}
    // this currently prints 2
    // but is that guaranteed?
    fmt.Println(s.a().b(s.getVal()))
}

Pontosabban, a relatív hívása sorrendben s.a()versus s.getVal()garantált? Golang meghatározza a „lexikális balról jobbra haladva”, de csak az egyéni kifejezés, és s.a().b()úgy tűnik, mintha ez technikailag egy másik kifejezést, mint s.getVal().

A viselkedés ez jelenleg a viselkedést én szeretnék, és várják, de nem tudom megmondani, hogy ez is egy viselkedés tudok támaszkodni „örökre”.

A kérdést 13/02/2020 23:55
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

A releváns része a spec van:

Az összes funkció hívás metódushívások és kommunikációs műveletek értékelték lexikális balról jobbra haladva.

és

Abban csomag szinten inicializálás függőségek felülírja a balról-jobbra szabály az egyéni inicializáló kifejezések, de nem operandusok az egyes kifejezéshez:

Válaszolt 14/02/2020 00:15
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more