Что различие между пространством имен и модулем в F#?

Ну, я все равно закончил; вау это какой-то ужасный / безумный SQL:

 DECLARE @SQL nvarchar(MAX);
 SET @SQL = N'SELECT T.FirstName,' + NCHAR(10) +
            STUFF((SELECT CONCAT(',',NCHAR(10),N'       STUFF((SELECT CONCAT('','',ShiftName)' + NCHAR(10) +
                                               N'              FROM T_Test S' + NCHAR(10) +
                                               N'              WHERE S.Firstname = T.FirstName' + NCHAR(10) +
                                               N'                AND S.ScheduleDate = ' + QUOTENAME(CONVERT(varchar(8),T.ScheduleDate,112),N'''')) + NCHAR(10) +
                                               N'              FOR XML PATH(N''''),TYPE).value(''.'',''varchar(MAX)''),1,1,N'''') AS ' + QUOTENAME(ScheduleDate)
                   FROM dbo.T_Test T
                   GROUP BY T.ScheduleDate
                   FOR XML PATH(N''),TYPE).value('.','varchar(MAX)'),1,2,N'') + NCHAR(10) +
            N'FROM T_Test T' + NCHAR(10) + 
            N'GROUP BY T.FirstName' + NCHAR(10) +
            N'ORDER BY T.FirstName;';

PRINT @SQL
EXEC sp_executesql @SQL;
77
задан Dave Berk 27 April 2009 в 21:28
поделиться

1 ответ

Пространство имен - это вещь .Net, распространенная во многих промышленных языках, просто способ организации сред и предотвращения конфликтов имен между различными библиотеками. И вы, и я можем определить тип «Foo» и использовать их оба в проекте, при условии, что они находятся в разных пространствах имен (например, NS1.Foo и NS2.Foo). Пространства имен в .Net содержат типы.

Модуль - это элемент F #, он примерно аналогичен «статическому классу» ... это объект, который может содержать значения и функции, связанные с символами, а также типы (примечание что пространства имен не могут напрямую содержать значения / функции, пространства имен могут содержать только типы, которые сами могут содержать значения и функции). На вещи внутри модуля можно ссылаться через «ModuleName.Thing», это тот же синтаксис, что и для пространств имен, но модули в F # также могут быть «открыты» для обеспечения неквалифицированного доступа, например

open ModuleName
...
Thing  // rather than ModuleName.Thing

(EDIT: пространства имен также могут быть открыты аналогичным образом, но тот факт, что модули могут содержать значения и функции, делает открыв более «интересный» модуль, в котором вы можете получить значения и функции, например «cos», то есть имена, которые вы можете использовать напрямую, тогда как в других .Net-языках вам, как правило, всегда приходится его квалифицировать, например «Math». .cos ").

Если вы набираете код на« верхнем уровне »в F #, этот код неявно входит в модуль.

Надеюсь, что это поможет, это довольно открытый вопрос. :)

но тот факт, что модули могут содержать значения и функции, делает открытие модуля более «интересным», поскольку вы можете получить значения и функции, например «cos», то есть имена, которые вы можете использовать напрямую, тогда как в других языках .Net вы Обычно это всегда нужно квалифицировать, например, «Math.cos»).

Если вы вводите код на «верхнем уровне» в F #, этот код неявно входит в модуль.

Надеюсь, что это немного помогает, это довольно открытый вопрос. :)

но тот факт, что модули могут содержать значения и функции, делает открытие модуля более «интересным», поскольку вы можете получить значения и функции, например «cos», то есть имена, которые вы можете использовать напрямую, тогда как в других языках .Net вы Обычно это всегда нужно квалифицировать, например, «Math.cos»).

Если вы вводите код на «верхнем уровне» в F #, этот код неявно входит в модуль.

Надеюсь, что это немного помогает, это довольно открытый вопрос. :)

На верхнем уровне 'в F # этот код неявно входит в модуль.

Надеюсь, что это поможет, это довольно открытый вопрос. :)

На верхнем уровне 'в F # этот код неявно входит в модуль.

Надеюсь, что это поможет, это довольно открытый вопрос. :)

86
ответ дан 24 November 2019 в 11:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: