Случайный модуль, инклюзивный и / или эксклюзивный [дубликат]

После двух лет разработки TypeScript мне наконец удалось решить эту проблему.

В принципе, TypeScript имеет два типа объявлений типов модулей: «local» (обычные модули) и ambient (глобальные) , Второй вид позволяет написать объявление глобальных модулей, которые объединены с объявлением существующих модулей. В чем отличия между этими файлами?

d.ts файлы рассматриваются как декларации окружающего модуля, только если у них нет импорта. Если вы предоставляете строку импорта, теперь она рассматривается как нормальный файл модуля, а не глобальный, поэтому расширенные определения модулей не работают.

Итак, поэтому все решения, которые мы обсуждали здесь, не работают , Но, к счастью, поскольку TS 2.9 мы можем импортировать типы в объявления глобальных модулей с помощью синтаксиса import():

declare namespace Express {
  interface Request {
    user: import("./user").User;
  }
}

Итак, эта строка import("./user").User; делает магию, и теперь все работает:)

87
задан Sнаđошƒаӽ 26 April 2016 в 17:37
поделиться

4 ответа

Скобка означает, что конец диапазона включен - он включает в себя указанный элемент. Скобка означает, что конец является исключительным и не содержит элемент, указанный в списке. Таким образом, для [first1, last1) диапазон начинается с first1 (и включает его), но заканчивается непосредственно перед last1.

Предполагая целые числа:

  • (0, 5) = 1, 2, 3, 4
  • (0, 5] = 1, 2, 3, 4, 5
  • [0, 5) = 0, 1, 2 , 3, 4
  • [0, 5] = 0, 1, 2, 3, 4, 5
142
ответ дан Michael Mrozek 17 August 2018 в 17:22
поделиться
  • 1
    Это развивается из предварительной алгебры школьной школы, где вы узнаете о функциях f (x) и области и области функции, где функция, подобная f (x) = x ^ 2, имела бы диапазон от 0 до положительной бесконечности, обозначаемый с помощью [0, ∞). – JohnMerlino 2 November 2014 в 16:31
  • 2
    @Timbo ∞ не является числом. – JakeD 20 January 2017 в 01:29
  • 3
    @pycoder Ваше определение числа кажется излишне ограничивающим. en.wikipedia.org/wiki/Surreal_number – Timbo 20 January 2017 в 01:49
  • 4
    @Timbo ru.wikipedia.org/wiki/Infinity Если бесконечность - это число, то это единственное число, которое я знаю о том, что x / x! = 1 и единственное число, где x / 2 = x (за исключением 0). – JakeD 20 January 2017 в 02:00
  • 5
    @pycoder. Почти правильно. Попробуйте также подключить -∞ и 1 / ∞ в ваши уравнения. Один из них - единственный номер, который я знаю о том, что y * x = y. Ноль, один, бесконечность и бесконечно малые числа отличаются от других чисел несколькими способами. Каждый тип номера - каждый номер - отличается от всех других номеров несколькими способами. Древние греки не считали, что трансцендентные числа - это числа. Мнимые и комплексные числа находятся за пределами гиперреальных числовых множеств. Когда люди говорят, что «∞ не является числом», они означают «∞» не является числом real ». или аналогичный для любого подмножества чисел, в котором они хотят, чтобы вы работали. – Timbo 20 January 2017 в 03:12
  • 6
    – wjandrea 28 July 2017 в 18:30
  • 7
    – Kevin Wright 3 August 2018 в 21:46

Концепция интервальной нотации появляется в как , так и в области математики и информатики. Математическая нотация [, ], (, ) обозначает область (или диапазон ) интервала.

  • Скобки [ и ] означают: число включено, эта сторона интервала закрыта ,
  • Скобки ( и ) означает: число исключено. Эта сторона интервала открыта .

Интервал со смешанными состояниями называется «полуоткрытым» .

Например, диапазон последовательных целых чисел из 1 .. 10 (включительно) было бы обозначено как таковое:

  • [1,10]

Обратите внимание, как слово inclusive был использован. Если мы хотим исключить конечную точку, но «накрыть» тот же диапазон, нам нужно переместить конечную точку:

  • [1,11)

Для левого и правого краев интервала есть фактически 4 перестановки:

(1,10) =   2,3,4,5,6,7,8,9       Set has  8 elements
(1,10] =   2,3,4,5,6,7,8,9,10    Set has  9 elements
[1,10) = 1,2,3,4,5,6,7,8,9       Set has  9 elements
[1,10] = 1,2,3,4,5,6,7,8,9,10    Set has 10 elements

Как это относится к математике и информатике?

Массив индексы имеют тенденцию использовать различное смещение в зависимости от того, в каком поле вы находитесь:

  • Математика имеет тенденцию быть на одном .
  • Некоторые языки программирования имеют тенденцию быть ноль , такие как C, C ++, Javascript, Python, тогда как другие языки, такие как Mathematica, Fortran, Pascal, основаны на одном.

Эти различия могут приводить к ошибкам после ошибки после ошибки , aka, by-one при реализации математических алгоритмов, таких как -lops.

Целые числа

Если у нас есть набор или массив, скажем, о первых нескольких простых числах [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ], математики ссылались бы на первый элемент как на 1st absolute . т.е. используя индексную нотацию для обозначения индекса:

  • a1 = 2
  • a2 = 3
  • :
  • a10 = 29

Некоторые языки программирования, в противоположность этому, относятся к первому элементу как к элементу zero'th относительного .

  • a [0] = 2
  • a [1] = 3
  • :
  • a [9] = 29

Поскольку индексы массива находятся в диапазоне [0, N-1], тогда для ясности было бы «приятно» сохранить то же числовое значение для диапазона 0 .. N вместо добавления текстового шума такой как смещение -1.

Например, на C или JavaScript для итерации по массиву из N элементов программист должен написать общую идиому i = 0, i < N с интервалом [0, N) вместо немного более подробных [0, N-1]:

function main() {
    var output = "";
    var a = [ 2, 3, 5, 7,  11, 13, 17, 19, 23, 29 ];
    for( var i = 0; i < 10; i++ ) // [0,10)
       output += "[" + i + "]: " + a[i] + "\n";

    if (typeof window === 'undefined') // Node command line
        console.log( output )
    else
        document.getElementById('output1').innerHTML = output;
}
 <html>
     <body onload="main();">
         <pre id="output1"></pre>
     </body>
 </html>

Математики, так как они начинают отсчет с 1, вместо этого будет использовать номенклатуру i = 1, i <= N, но теперь нам нужно исправить смещение массива на языке с нулевым значением.

e. g.

function main() {
    var output = "";
    var a = [ 2, 3, 5, 7,  11, 13, 17, 19, 23, 29 ];
    for( var i = 1; i <= 10; i++ ) // [1,10]
       output += "[" + i + "]: " + a[i-1] + "\n";

    if (typeof window === 'undefined') // Node command line
        console.log( output )
    else
        document.getElementById( "output2" ).innerHTML = output;
}
<html>
    <body onload="main()";>
        <pre id="output2"></pre>
    </body>
</html>

Помимо:

В языках программирования, основанных на 0, может потребоваться kludge фиктивного нулевого элемента использовать математический 1-основанный алгоритм. например Python Index Start

Плавающая точка

Интервальная нотация также важна для чисел с плавающей запятой, чтобы избежать тонких ошибок.

Когда занимающихся числами с плавающей запятой, особенно в компьютерной графике (цветовое преобразование, вычислительная геометрия, ускорение / смешивание анимации и т. д.) часто используются нормированные числа. То есть цифры между 0.0 и 1.0.

Важно знать случаи кросс, если конечные точки включительно или exclusive :

  • (0,1) = 1e-M .. 0,999 ...
  • (0,1] = 1e-M .. 1,0
  • [0, 1) = 0.0 .. 0.999 ...
  • [0,1] = 0,0 .. 1,0

Где M - некоторая машина epsilon . Вот почему вы иногда можете видеть икону const float EPSILON = 1e-# в коде C (например, 1e-6) для 32-битного числа с плавающей запятой. Этот вопрос SO Обеспечивает ли EPSILON что-нибудь? имеет некоторые предварительные данные. Более подробный ответ см. В FLT_EPSILON и книге Дэвида Голдберга . Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой

. Некоторые реализации генератора случайных чисел random() могут создавать значения в диапазоне 0.0 .. 0.999 ... вместо более удобного 0.0 .. 1.0. Правильные комментарии в коде будут документировать это как [0.0,1.0) или [0.0,1.0], поэтому нет никакой двусмысленности в отношении использования.

Пример:

  • Вы хотите генерировать цвета random(). Вы конвертируете три значения с плавающей запятой в 8-битные значения без знака для создания 24-битного пикселя с красными, зелеными и синими каналами соответственно. В зависимости от выходного интервала random() вы можете получить near-white (254,254,254) или white (255,255,255).

+--------+-----+ |random()|Byte | |--------|-----| |0.999...| 254 | <-- error introduced |1.0 | 255 | +--------+-----+

Для более подробная информация о точности и надежности с плавающей точкой с интервалами см. в Обнаружение столкновений в режиме реального времени в режиме реального времени , глава 11 Численная устойчивость , раздел 11.3 Надежное использование точек с плавающей запятой .

12
ответ дан Community 17 August 2018 в 17:22
поделиться

Это может быть математическое соглашение в определении интервала, где квадратные скобки означают «экстремальные включительные» и круглые скобки «экстремальные исключительные».

1
ответ дан Eddy 17 August 2018 в 17:22
поделиться

Это полуоткрытый интервал .

  • Замкнутый интервал [a,b] включает в себя конечные точки.
  • Открытый интервал (a,b) исключает их.

В вашем случае включена конечная точка в начале интервала, но конец исключен. Таким образом, это означает интервал «first1 & lt; = x & lt; last1».

Полупрозрачные интервалы полезны при программировании, поскольку они соответствуют общей идиоме для цикла:

for (int i = 0; i < n; ++i) { ... } 

Здесь i находится в диапазоне [0, n).

28
ответ дан Mark Byers 17 August 2018 в 17:22
поделиться
Другие вопросы по тегам:

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