Przypisanie wielu wartości do zmiennych w jednym wierszu

0

Hej

Mam taki kod (problem dotyczy języka GO):

import (
	"fmt"
)

func add(a, b int) (int, int) {
	return a + b, a - b
}

func main() {
	var a, b int
	a, b = add(7, 12)
	fmt.Println(a, b)
}

Mam problem ze zrozumieniem jak to się dzieje, że kiedy do zmiennych a i b przypiszę metodę w takiej postaci add(7, 12) to samo wywołanie samych zmiennych wykona mim kod zawarty w metodzie?

Korzystam z poradnik ze strony: http://golang.org.pl/getting_started/02_my_tutorial.html#krotki-tutorial

@Edit: Chodzi pewnie o to, że przypisze do zmiennych wartość zwracaną przez metodę (return)?

1

Nie wiem dokładnie czego nie rozumiesz?! Przypisanie do zmiennej wywołania metody powoduje, że to co zwróci metoda zostaje przypisane do tej zmiennej. Dodatkowo w języku GO istnieje coś takiego jak lazy evaluation: https://en.wikipedia.org/wiki/Lazy_evaluation

Jest to mechanizm, który powoduje, że wartości zmiennych są wyznaczane dopiero wtedy gdy są potrzebne.

2

Dodam jeszcze od siebie:

  • W go musisz użyć każdej zmiennej, którą inicjujesz. Inaczej otrzymasz błąd kompilacji. W powyższym przykładzie masz prosty kod. Funkcja add i main. W main wywołujesz funkcję 'add'. Zadeklarowałeś tam zwracanie dwóch intów
(int, int)

wobec czego w return masz:

 a + b

oraz

a - b

Następnie w main do:

a, b

Przypisujesz metodę add o parametrach 7 oraz 12. Następnie wywołujesz te zmienne bo to one mają wartości tej metody. Możesz tak zrobić ponieważ w Go do zmiennych możesz przypisywać wartości w ten sposób:

var a, b, c, d int = 1, 2, 3, 4
fmt.Println(a, b, c, d)

Nie ma w tym kodzie żadnej magii ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1