В следующем коде почему 2 дает вывод, а не 3? Оператор removechars возвращает строку длиной 0
import std.stdio, std.string;
void main() {
string str = null;
if (str) writeln(1); // no
str = "";
if (str) writeln(2); // yes
if (",&%$".removechars(r"^a-z")) writeln(3); // no
}
Редактировать: Хорошо, он может вернуть ноль, но я все еще немного озадачен, потому что все эти печати верны
writeln(",&%$".removechars(r"^a-z") == "");
writeln(",&%$".removechars(r"^a-z") == null);
writeln(",&%$".removechars(r"^a-z").length == 0);
Редактировать 2: Это также печатает true, но поместите любой из них в условное, и вы получите другой результат
writeln("" == null);
Редактировать 3: Хорошо, я понимаю, что не могу проверить на пустую строку, как я сделал. Что привело к этому вопросу, так это следующая ситуация. Я хочу удалить символы из слова, но не хочу хранить пустую строку:
if (auto w = word.removechars(r"^a-z"))
wordcount[w]++;
Это работает, когда я пытаюсь это сделать, но это должно быть потому, что removechars возвращает ноль, а не ""