Реализация того же интерфейса при различных универсальных инстанцированиях

Универсальные представления обычно будут способом пойти, но в конечном счете Вы свободны обработать URL однако, Вы хотите. FormWizard делает вещи основанным на классах способом, также, как и некоторые приложения для УСПОКОИТЕЛЬНЫХ API.

В основном с URL Вам дают набор переменных и помещаете для обеспечения вызываемого, что вызываемый Вы обеспечиваете, полностью ваше дело - стандартный путь состоит в том, чтобы обеспечить функцию - но в конечном счете Django не ставит ограничений, что Вы делаете.

я действительно соглашаюсь, что еще несколько примеров того, как сделать это, были бы хороши, FormWizard является, вероятно, местом для запуска все же.

16
задан ildjarn 28 March 2013 в 22:04
поделиться

1 ответ

Прямо сейчас я не знаю о планах разрешить это. . Функция была запланирована и, по крайней мере частично (см. Комментарии), реализована в F # 4.0.

Я думаю, что единственная причина, по которой она сейчас запрещена, заключается в том, что ее нетривиально реализовать (особенно с типом F # вывод), и это редко возникает на практике (я припоминаю только одного клиента, когда-либо задававшего этот вопрос).

Учитывая бесконечное количество времени и ресурсов, я думаю, что это было бы разрешено (я могу представить, что это будет добавлено в будущую версию языка), но сейчас не похоже, что эта функция стоит усилий по поддержке. (Если вам известен убедительный аргумент, напишите нам по адресу fsbugs@microsoft.com.)

РЕДАКТИРОВАТЬ

В качестве эксперимента для любопытных я написал этот C #:

public interface IG<T>
{
    void F(T x);
}
public class CIG : IG<int>, IG<string>
{
    public void F(int x) { Console.WriteLine("int"); }
    public void F(string x) { Console.WriteLine("str"); }
}

и сослался на него из F # (с комментариями, предлагающими результаты)

let cig = new CIG()
let idunno = cig :> IG<_>  // type IG<int>, guess just picks 'first' interface?
let ii = cig :> IG<int>    // works
ii.F(42)                   // prints "int"
let is = cig :> IG<string> // works
is.F("foo")                // prints "str"

, так что это то, что обычно происходит с этим «граничным» материалом с F # - F # может нормально воспринимать эти вещи, даже если вы не можете создавать то же самое из языка.

11
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

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