OberonCore https://forum.oberoncore.ru/ |
|
Частичный экспорт в Хаскелле https://forum.oberoncore.ru/viewtopic.php?f=72&t=1714 |
Страница 1 из 1 |
Автор: | Geniepro [ Вторник, 14 Июль, 2009 12:34 ] |
Заголовок сообщения: | Частичный экспорт в Хаскелле |
Модератор: перенесено. Инициирующее сообщение viewtopic.php?p=31867#p31867 ----------------------------------------------------------------------------------------------- slava писал(а): Поля должны быть скрытыми для всех сущностей вне модуля, но открытыми для всех сущностей внутри модуля. Ещё в Хаскеле можно так сделать -- экспортировать часть конструкторов типов. В С++ Вам этого не отобразить. Ада -- "да". Ява с ее пакетами, хоть как то "да". С++ -- "нет", Питон (насколько я знаю) -- тоже "нет". Правда, так как поля записей полностью описываются в одном конструкторе, то, возможно, придётся делать два конструктора -- один с полным набором полей для внутренних целей, другой -- только с публичными полями. Т.е. два представления одной и той же записи... |
Автор: | Geniepro [ Вторник, 14 Июль, 2009 19:01 ] |
Заголовок сообщения: | Re: Частичный экспорт в Хаскелле |
Вот простой пример: Пусть имеем такой модуль: Код: 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' } |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |