Массив строк для целых чисел [дубликат]

Отображает текущее местоположение файла или каталога, в котором вы сейчас находитесь. если ваш пакетный файл был в каталоге рабочего стола, тогда «% ~ dp0» отобразит каталог рабочего стола. если вы хотите, чтобы он отображал текущий каталог с текущим именем файла, вы можете ввести «% ~ dp0% ~ n0% ~ x0».

36
задан Chris Martin 4 July 2016 в 04:57
поделиться

1 ответ

Elixir имеет два типа строк: двоичные файлы (двойные кавычки) и списки символов (одиночные кавычки). Последний вариант наследуется от Erlang и внутренне представлен как список целых чисел, которые сопоставляются с кодовыми точками строки.

Когда вы используете такие функции, как inspect и IO.inspect, Elixir пытается быть smart и форматировать список целых чисел в виде строки для удобства чтения. Однако в некоторых случаях вы получаете бессмысленную строку только потому, что все целые числа в вашем списке являются действительными кодовыми точками. Например, символы от A до Z представлены как целые числа от 65 до 90 в ASCII.

iex> IO.inspect [65, 66, 67]
'ABC'

Если вам нравится печатать необработанный список, вы можете использовать опцию charlists: :as_lists. Для полного списка опций запустите iex и введите h Inspect.Opts.

iex> IO.inspect [65, 66, 67], charlists: :as_lists
[65, 66, 67]

С Elixir & lt; 1.4, вы можете использовать char_lists: false.

Кстати, это не единственный случай, когда Elixir скрывает от вас базовые строительные блоки, это также происходит с двоичными файлами (двойными кавычками) и структурами.

Более глубокая причина этого заключается в том, что у Elixir и Erlang нет пользовательских типов, поэтому нет возможности различать список и одну строку с кавычками, потому что оба являются просто списками. Однако это также может быть сильным в других ситуациях. Например, это позволяет нам тривиально сериализовать любую структуру данных в Elixir и Erlang, поскольку она может быть построена только из основных строительных блоков, которые поставляются с языком.

62
ответ дан Patrick Oscity 18 August 2018 в 15:07
поделиться
  • 1
    Спасибо @Patrick Oscity, Это объяснение, которое я искал. – George Taveras 4 May 2015 в 20:51
  • 2
    @Patrick Oscity: просто для моего любопытства, в этом смысле у Elixir нет «пользовательских типов»? Если они вам действительно нужны, вы можете использовать @ type defin_string :: {: defin_string, String.t} Есть ли какие-либо принципиальные отличия от, например, Haskell? – Miroslav Prymek 5 May 2015 в 17:08
  • 3
    @MiroslavPrymek разница заключается в том, что типы являются только аннотациями в Elixir и не «действительно». часть языка. Вы можете использовать их для статического анализа, но фактические типы являются динамическими, игнорируя аннотации. Поэтому типы могут быть созданы как аннотации, но нет способа ссылаться на эти типы во время выполнения программы. Например, вы не можете написать функцию, которая принимает любое значение и возвращает свой тип. Во время выполнения все значения, как представляется, состоят только из основных типов. Также см. elixir-lang.org/getting-started/typespecs-and-behaviours.html – Patrick Oscity 5 May 2015 в 21:42
  • 4
    Тем не менее, существует также менее строгое определение типа, которое может быть шокирующим для кого-то из Haskell ;-). На данный момент я не могу найти хорошие слова, но я попробую. Возможно, вам захочется прочитать главу 9 «Рядом - какие типы?». из книги Дейва Тома Программирование Elixir . По сути, он говорит, что, хотя каждое значение состоит только из примитивных типов, вы можете получить квази-типы, определяя функции, ожидающие значений, придерживающихся определенной схемы. Например, координата в двумерном пространстве может быть представлена ​​двухэлементным кортежем. – Patrick Oscity 5 May 2015 в 21:56
  • 5
    Эти функции затем группируются в модули, которые сохраняют все функции, используемые для совместной работы с типом. Тем не менее, нет никакого способа понять этот тип набора текста. Все это происходит на концептуальном уровне, а не строятся на строгих правилах набора текста внутри языка. Вы обнаружите, что это иногда приводит к странным ошибкам, но я обнаружил, что это проблема меньше, чем можно было бы подумать вначале. – Patrick Oscity 5 May 2015 в 21:58
Другие вопросы по тегам:

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