Солидность. Найдите, существует ли ключ в сопоставлении. Затем получить его значение

У меня есть простое отображение:

 mapping(address => string) professorsExam;

Как я могу проверить, msg.senderявляется ли ключ в этом отображении, и если да, то получить его значение? Если это не так, я должен что-то вернуть.

string memory professorsExamHash = professorsExam[msg.sender];  // The hash of the exam owned by msg.sender
if(professorsExamHash == 0x0){
    return "No exam hash asociated with this professor address";
}

Это не работает,

TypeError: Оператор == не совместим со строковой памятью типов и int_const 0

Я пробовал много других вещей. Но ==пока не совместим ни с чем.

Ответы (1)

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

Ваш новый код будет выглядеть следующим образом:

if(bytes(professorsExamHash).length == 0){
    return "No exam hash asociated with this professor address";
}