OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Частичный экспорт в Хаскелле
СообщениеДобавлено: Вторник, 14 Июль, 2009 12:34 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Модератор: перенесено. Инициирующее сообщение viewtopic.php?p=31867#p31867
-----------------------------------------------------------------------------------------------
slava писал(а):
Поля должны быть скрытыми для всех сущностей вне модуля, но открытыми для всех сущностей внутри модуля.
В С++ Вам этого не отобразить.

Ада -- "да". Ява с ее пакетами, хоть как то "да". С++ -- "нет", Питон (насколько я знаю) -- тоже "нет".
Ещё в Хаскеле можно так сделать -- экспортировать часть конструкторов типов.
Правда, так как поля записей полностью описываются в одном конструкторе, то, возможно, придётся делать два конструктора -- один с полным набором полей для внутренних целей, другой -- только с публичными полями. Т.е. два представления одной и той же записи...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Частичный экспорт в Хаскелле
СообщениеДобавлено: Вторник, 14 Июль, 2009 19:01 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Вот простой пример:

Пусть имеем такой модуль:
Код:
module TestRec (
    SomeRecord(Public),
    test
) where

data SomeRecord = Public  { a:: Int, b:: Char }
                | Private { a:: Int, b:: Char, c::String }

instance Show SomeRecord where
    show rec = "SomeRecord { a = " ++ show (a rec) ++ ", b = " ++ show (b rec) ++ " }"

test rec = Private (1 + a rec) 'b' "Hidden field"
Импортируем его из другого модуля:
Код:
module Main where

import qualified TestRec

rec1 = TestRec.Public 1 'a'
rec2 = TestRec.test rec1

main = do
    print rec1
    print rec2
Как и следовало ожидать, на экран выводится вот это:
Код:
SomeRecord { a = 1, b = 'a' }
SomeRecord { a = 2, b = 'b' }


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB