Кто такой Хиндли-Milner?

Неустранимая ошибка: Невозможно переопределить класс [имя класса]

Неустранимая ошибка: невозможно обновить [имя функции]

Это означает, что вы либо используете одно и то же имя функции / класса дважды, и вам нужно переименовать один из них, или это потому, что вы использовали require или include, где вы должны использовать require_once или include_once.

Когда класс или функция объявляется в PHP, он неизменен и не может быть позже объявлен с новым значением.

Рассмотрим следующий код:

class.php

<?php

class MyClass
{
    public function doSomething()
    {
        // do stuff here
    }
}

index.php

<?php

function do_stuff()
{
   require 'class.php';
   $obj = new MyClass;
   $obj->doSomething();
}

do_stuff();
do_stuff();

Второй вызов do_stuff() приведет к получению ошибка выше. Изменяя require на require_once, мы можем быть уверены, что файл, содержащий определение MyClass, будет загружен только один раз, и ошибка будет устранена.

119
задан KyleMit 20 August 2014 в 14:26
поделиться

2 ответа

Хиндли-Milner система типов обнаружен независимо Roger Hindley (кто смотрел на логику), и позже Robin Milner (кто смотрел на языки программирования). Преимущества Хиндли-Milner

  • , Это поддерживает полиморфный функции; например, функция, которая может дать Вам длину списка, независимого от типа элементов или функции, делает поиск двоичного дерева, независимый от типа ключей, сохраненных в дереве.

  • Иногда функция или значение могут иметь больше чем один тип , как в примере функции длины: это может быть "список целых чисел к целому числу", "список строк к целому числу", "список пар к целому числу", и так далее. В этом случае преимущество сигнала системы Хиндли-Milner состоит в том, что каждый хорошо введенный термин имеет уникальный "лучший" тип , который называют основной тип . Основной тип функции длины списка "для любого a, функция из списка a к целому числу". Здесь a так называемый "параметр типа", который является явный в лямбда-исчислении , но неявный на большинстве языков программирования . Использование параметров типа объясняет, почему Хиндли-Milner является системой, которая реализует параметрический полиморфизм . (Если Вы пишете определение функции длины в ML, Вы видите параметр типа таким образом:

     fun 'a length []      = 0
       | 'a length (x::xs) = 1 + length xs
    
  • , Если термин сделал, чтобы Хиндли-Milner ввел, то основной тип может быть выведен, не требуя никаких описаний типа или другие аннотации программиста. (Это - палка о двух концах, как любой может засвидетельствовать, кто когда-либо обрабатывался большой блок кода ML без аннотаций.)

Хиндли-Milner является основанием для системы типов почти каждого функционального языка со статическим контролем типов. Такие широко использующиеся языки включают

, Все эти языки расширили Хиндли-Milner; Haskell, Чистые, и Объективные Caml делают так амбициозными и необычными способами. (Расширения требуются, чтобы иметь дело с изменяемыми переменными, так как основной Хиндли-Milner может ниспровергаться с помощью, например, изменяемую ячейку, содержащую список значений неуказанного типа. С такими проблемами имеет дело расширение, названное ограничение значения.)

Много других незначительных языков и инструментов на основе введенных функциональных языков используют Хиндли-Milner.

Хиндли-Milner является ограничением система F , которая позволяет больше типов, но которая требует аннотаций программиста .

162
ответ дан Norman Ramsey 24 November 2019 в 01:51
поделиться

Можно быть в состоянии найти исходные бумаги с помощью Google Scholar или CiteSeer - или локальная университетская библиотека. Первое является достаточно взрослым, что Вам, вероятно, придется найти связанные копии журнала, я не мог найти его онлайн. Связь, которую я нашел для другого, была разорвана, но могли бы быть другие. Вы, конечно, будете в состоянии найти бумаги, которые цитируют их.

Хиндли, Roger J, основная схема типа объекта в комбинаторной логике , Транзакции американского Математического Общества, 1969.

Milner, Robin, Теория А Полиморфизма Типа , Журнал Компьютерных и Системных Наук, 1978.

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

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