Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2013-07-06 11:00:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:goбьектное

goбъектное-3
Для комплекта еще пример switch по типу значения:

func sumCoor(p Point) float64 {
	switch p := p.(type) {
		case Point2D: return p.x+p.y
		case Point3D: return sumCoor(p.Point2D) + p.z
	}
	panic ("unknown point type")
}

func main() {
	fmt.Println(sumCoor(p2))
	fmt.Println(sumCoor(p3))
}

Смысл понятен, единственное, что может стоит пояснить - p в данном операторе переобъявляется (можно дать и другое имя, но данный вариант в go является идиоматическим) и в таком контексте новая переменная в каждой ветке рассматривается как имеющая соответствующий метке тип.

На сам деле точный аналог оператора в Simula-67, ЕВПОЧЯ