Jdi vyhodnocení pořadí mezi členskými vyvolání zaručena?

hlasů
-2

Řekněme, že mám struct s stavu a několik členských funkcí na tomto struct. Řekněme, že člen struct vrátí instanci svého vlastního druhu, a já vyzývám další funkce na tomto stupni, a předat výsledek volání nějaký jiný člen na počátečním stupni jako argument. Je pořadí vyvolání mezi prvním vyvolání a argument vyvolání, se zárukou?

(Tento model přijde hodně, když se snaží postavit „stavitel“ type objektů, které mají nějaký vnitřní stav, stejně jako expresní stack).

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()))
}

Konkrétně je relativní vyvolání pořadí s.a()oproti s.getVal()zaručena? Golang definuje „lexikální zleva doprava pořádek“, ale pouze pro individuální vyjádření, a s.a().b()zdá se, jako by to technicky jiný výraz než s.getVal().

Chování je v současné době je chování bych chtějí a co očekávají, ale nemohu říci, zda je to také chování mohu spolehnout na „navždy“.

Položena 13/02/2020 v 23:55
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Příslušná část spec je:

všechna volání funkce, volání metod, a komunikační akce jsou hodnoceny v lexikální zleva doprava pořadí.

a

Na úrovni balíčku, inicializační závislostí přepsat zleva doprava pravidlo pro jednotlivé inicializace výrazy, ale ne pro operandů v rámci každého výrazu:

Odpovězeno 14/02/2020 v 00:15
zdroj uživatelem

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