Чтобы понять, почему это не работает, декомпилируйте его с помощью Reflector.Вы создаете кортеж и немедленно его разрушаете.В любом случае, в режиме отладки промежуточный кортеж создается как поле internal
включающего типа (подробности реализации сопоставления с шаблоном).Конечно, это делает его более доступным, чем T
, то есть private
.Мне любопытно узнать, если это ошибка (кажется, что это).
РЕДАКТИРОВАТЬ
Это становится более странным ...
Следующее не удается скомпилировать (с синтаксисомошибка), но компилируется нормально, если типы являются общедоступными и используется let
вместо let private
.
type private T = {a:int; b:int}
let private t = {a=0; b=0}
let private {a=a; b=b} = t //syntax error
type private U() = class end
let private ul = [U()]
let private [u] = ul //syntax error
Я думаю, что можно с уверенностью сказать, деструктурирование в частных привязках let
уровня модуляесть некоторые проблемы.