Гарантирует ли идти порядок оценки между сеансами членов?

голоса
-2

Скажем, у меня есть с государством-структура, а несколько функций-членов на этой структуру. Допустим, что член структуры возвращает экземпляр своего типа, и я называю дополнительные функции на этом экземпляре, и передать результат вызова какой-либо другой элемент на начальном например, в качестве аргумента. Является ли порядок вызова между первым вызовом, и аргументом вызовом, гарантированы?

(Эта модель приходит много при попытке построить «строитель» объекты типа, которые имеют некоторое внутреннее состояние, как стек выражений.)

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

В частности, это относительный порядок призывания s.a()против s.getVal()гарантированы? Golang определяет «лексический порядок слева направо» , но только для индивидуального выражения, и s.a().b()кажется, что это технически другое выражение , чем s.getVal().

Поведение, которое он в настоящее время является поведение, я бы хотел, и ожидать, но я не могу сказать, является ли это также поведение, я могу рассчитывать на «навсегда.»

Задан 13/02/2020 в 23:55
источник пользователем
На других языках...                            


1 ответов

голоса
0

Соответствующая часть спецификации является:

все вызовы функций, вызовы методов и коммуникационные операции оцениваются в лексическом порядке слева направо.

и

На уровне пакета, зависимости инициализации переопределения слева-направо правил для отдельных выражений инициализации, но не для операндов в пределах каждого выражения:

Ответил 14/02/2020 в 00:15
источник пользователем

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