Я просматривал исходный код OpenDE и натолкнулся на странное использование синтаксиса оператора индексации массива '[]' в классе. Вот упрощенный пример, демонстрирующий синтаксис:
#include <iostream>
class Point
{
public:
Point() : x(2.8), y(4.2), z(9.5) {}
operator const float *() const
{
return &x;
}
private:
float x, y, z;
};
int main()
{
Point p;
std::cout << "x: " << p[0] << '\n'
<< "y: " << p[1] << '\n'
<< "z: " << p[2];
}
Вывод:
x: 2.8
y: 4.2
z: 9.5
Что здесь происходит? Почему этот синтаксис работает? Класс Point не содержит перегруженного оператора []
, и здесь этот код пытается выполнить автоматическое преобразование, чтобы где-то плавать.
Я никогда раньше не видел такого использования - он определенно выглядит необычно и удивительно, мягко говоря. Джон Смит, john.smith@hotmail.com Нэнси, Смит, nancy.smith@gmail.com Джейн, Доу, jane.doe@aol.com Джон Доу, john.doe@yahoo.comкак получить электронную почту ...
Например, из следующего файла:
Name,Surname,E-mail John,Smith,john.smith@hotmail.com Nancy,Smith,nancy.smith@gmail.com Jane,Doe,jane.doe@aol.com John,Doe,john.doe@yahoo.com
как получить адрес электронной почты Джона Доу?
Сейчас я использую следующий код, но могу указать только Теперь одно ключевое поле:
val src = Source.fromFile(file)
val iter = src.getLines().drop(1).map(_.split(","))
var quote = ""
iter.find( _(1) == "Doe" ) foreach (a => println(a(2)))
src.close()
Я пытался написать «iter.find (_ (0) ==« Джон »&& _ (1) ==« Доу »)», но это вызывает ошибку, сообщающую, что только один параметр ожидается (включение условия в лишнюю пару скобок не помогает).