Есть замечательные работы Хосе Валима Мокса и явные контракты . В нем говорится, что
всегда считают «mock» существительным , а не глаголом
blockquote>. 112] функция генерации . Вам лучше создать генератор и поиздеваться над ним.
Примерно так:
defmodule Generator do @callback gen_id :: integer() end defmodule NanoGenerator do @moduledoc "Used in dev/prod" @behaviour Generator @impl true def gen_id() do get_nano_id() # external function or whatever end end defmodule TestGenerator do @moduledoc "Used in test" @behaviour Generator use Agent # to store state @ids ~w|foo foo bar| @impl true def gen_id() do id = # get the counter from Agent, and increase it @ids[id] end end
Теперь у вас все готово вернуть все, что вы хотите из генератора.
Причина указана на странице ii в Стандартный ECMA-404 Синтаксис Обмена данными JSON, 1-й Выпуск
JSON является агностиком о числах. На любом языке программирования может быть множество типов числа различных мощностей и дополнений, зафиксированных или плавание, двоичный файл или десятичное число. Это может сделать обмен между различными языками программирования трудным. JSON вместо этого предлагает только представление чисел, которые используют люди: последовательность цифр. Все языки программирования знают, как понять последовательности цифры, даже если они не соглашаются относительно внутренних представлений. Этого достаточно для разрешения обмена.
причина не, как многие утверждали, из-за представлений NaN
и Infinity
сценарий ECMA. Простота является базовым принципом разработки JSON.
, поскольку это столь просто, не ожидается, что грамматика JSON будет когда-либо изменяться. Это дает JSON, как основополагающая нотация, огромная устойчивость
Infinity
и NaN
aren 't ключевые слова или что-то особенное, это просто свойства глобального объекта (как и undefined
) и, как таковые, могут быть изменены. По этой причине JSON не включает их в спецификацию - по сути, любая истинная строка JSON должна иметь тот же результат в EcmaScript, если вы выполняете eval (jsonString)
или JSON.
Не могли бы вы адаптировать шаблон нулевого объекта , и в вашем JSON представьте такие значения как
"myNum" : {
"isNaN" :false,
"isInfinity" :true
}
Затем при проверке вы можете проверить тип
if (typeof(myObj.myNum) == 'number') {/* do this */}
else if (myObj.myNum.isNaN) {/* do that*/}
else if (myObj.myNum.isInfinity) {/* Do another thing */}
, который я знаю в Java, вы можете переопределить методы сериализации, чтобы реализовать такую вещь. Не знаю, откуда у вас сериализация, поэтому я не могу подробно рассказать о том, как реализовать это в методах сериализации.