Схема типа общего типа в машинописном тексте [дубликат]

Он представляет запрос пользователю (необязательный arg из raw_input([arg])), получает вход от пользователя и возвращает данные, вводимые пользователем в строку. См. Документы для raw_input() .

Пример:

name = raw_input("What is your name? ")
print "Hello, %s." % name

Это отличается от input() тем, что последний пытается интерпретировать ввод, заданный пользователем; обычно лучше избегать input() и придерживаться raw_input() и пользовательского кода синтаксического анализа / преобразования.

Примечание: это для Python 2.x

4
задан Akxe 9 July 2018 в 14:49
поделиться

1 ответ

Вы не можете сузить тип общего параметра внутри функции. Поэтому, когда вы проверяете a, это не укажет компилятору, что такое тип b. И что еще более важно, он не скажет компилятору, каков должен быть тип возвращаемого значения функции

function add<T extends (number | string)>(a: T, b: T): T {
    if (typeof a === 'string' && typeof b === 'string') {
        let result = a + b; // result is string, we can apply + 
        return result as T; // still an error without the assertion, string is not T 
    } else if (typeof a === 'number' && typeof b === 'number') {
        let result = a + b; // result is number, we can apply +
        return result as T; // still an error without the assertion, number is not T  
    }
    throw "Unsupported parameter type combination"; // default case should not be reached
}

. В этом случае, возможно, имеется специальная подпись подписи, которая работает на объединении (это означает, что утверждение не является требуется), а публичная подпись - та, которую вы ранее использовали .:

function add<T extends number | string>(a: T, b: T): T
function add(a: number | string, b: number | string): number | string {
    if (typeof a === 'string' && typeof b === 'string') {
        return a + b;
    } else if (typeof a === 'number' && typeof b === 'number') {
        return a + b;
    }
    throw "Unsupported parameter type combination"; // default case should not be reached
}
1
ответ дан Titian Cernicova-Dragomir 16 August 2018 в 11:09
поделиться
  • 1
    Разве это не предупреждает вас, что возвращаемое значение может быть undefined? – jcalz 9 July 2018 в 14:57
  • 2
    @jcalz без строгих нулевых проверок нет ... Я играл на детской площадке, добавит бросок для возврата по умолчанию – Titian Cernicova-Dragomir 9 July 2018 в 14:59
  • 3
    Это меня огорчает ... Они собираются реализовать его когда-нибудь? – Akxe 9 July 2018 в 16:00
  • 4
    Не уверен, я не следую дискуссиям, которые, возможно, знают @jcalz. Сужение общего типа кажется полезной особенностью (я видел много вопросов вокруг здесь, которые предполагают, что это произойдет), но я не уверен, что последствия этого будут – Titian Cernicova-Dragomir 9 July 2018 в 16:03
  • 5
    Они намерены реализовать что? Если T является «привет», тогда add("hello","hello") потребуется вернуть значение типа "hello", которого оно не будет. Поэтому мы действительно не хотим, чтобы выход был T, но что-то вроде T extends number ? number : string, которое, безусловно, реализуемо (хотя в настоящее время анализ потока управления и условные типы плохо взаимодействуют друг с другом, поэтому вам все равно нужны либо утверждения, либо один разрешающий перегрузка) – jcalz 9 July 2018 в 16:11
Другие вопросы по тегам:

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