Являются ли f-строки уникальной особенностью python (3.6 и выше)?

Простой пример с использованием std::sort

struct MyStruct
{
    int key;
    std::string stringValue;

    MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
};

struct less_than_key
{
    inline bool operator() (const MyStruct& struct1, const MyStruct& struct2)
    {
        return (struct1.key < struct2.key);
    }
};

std::vector < MyStruct > vec;

vec.push_back(MyStruct(4, "test"));
vec.push_back(MyStruct(3, "a"));
vec.push_back(MyStruct(2, "is"));
vec.push_back(MyStruct(1, "this"));

std::sort(vec.begin(), vec.end(), less_than_key());

Редактирование: как указывал Кирилл В. Лядвинский, вместо предоставления предиката сортировки вы можете реализовать operator< для MyStruct:

struct MyStruct
{
    int key;
    std::string stringValue;

    MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}

    bool operator < (const MyStruct& str) const
    {
        return (key < str.key);
    }
};

Используя этот метод, вы можете просто отсортировать вектор следующим образом:

std::sort(vec.begin(), vec.end());

Edit2: Как говорит Каппа, вы также можете сортируйте вектор в порядке убывания, перегрузив оператор > и изменив вызов сортировки бит:

struct MyStruct
{
    int key;
    std::string stringValue;

    MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}

    bool operator > (const MyStruct& str) const
    {
        return (key > str.key);
    }
};

И вы должны вызвать сортировку как:

std::sort(vec.begin(), vec.end(),greater());

-1
задан Patrick Artner 13 July 2018 в 09:26
поделиться

3 ответа

Вы можете найти его под именем Template Literals в Javascript. В частности, см. Раздел Expression Interpolation для примера, аналогичного тому, который задан в вопросе OP.

0
ответ дан Alessandro Cosentino 17 August 2018 в 13:21
поделиться

Краткий ответ: Нет - не уникально для python. В python она была введена с 3.6 по Literal String Interpolation - PEP 498

. В C # имеется интерполяция $ - строк как сокращение для некоторой функции, которую вы бы используйте String.Format для:

string val = "similar";
string s = $"This is {val}"     // s == "This is similar"

// vs. 

var s2 = string.Format ("This is {0}", val); // {0} = 0th param that follows
1
ответ дан Patrick Artner 17 August 2018 в 13:21
поделиться

Оболочка: запуск в оболочках темных веков, используемых для расширения параметров в двойных кавычках (и некорректированные аргументы тоже).

Perl: Perl имеет скрытую сторону и имеет интерполяцию в двойных кавычках по крайней мере с того времени, когда я купил 1-е издание книги верблюдов и начал изучать язык.

Я думаю, что другие люди могут быть более конкретными в точную дату введения строки интерполяция в Perl, но я подозреваю, что это было с самого начала.

Многие другие языки программирования, особенно те, которые используют sigils , разделяют эту концепцию интерполяции.

0
ответ дан psmears 17 August 2018 в 13:21
поделиться
Другие вопросы по тегам:

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