要打 TMap<uint64, TSet> 的日志,以前要套两层 FString::JoinBy:
UE_LOG(LogTemp, Display, TEXT("IdToValues: %s"), *FString::JoinBy(IdToValues, TEXT(","), [](const TPair<uint64, TSet<int32>>& Pair) {
return FString::Printf(TEXT("{%llu:[%s]}"), Pair.Key, *FString::JoinBy(Pair.Value, TEXT(","), [](int32 Value) {
return FString::Printf(TEXT("%d"), Value);
}));
}));
改用 UStrify 之后:
UE_LOG(LogTemp, Display, TEXT("IdToValues: %s"), *UStrify::ToString(IdToValues, true));
// 第二个参数是 Multilines
两个差别:
- 要敲的代码少很多。
- 这个 map 如果从 TMap<uint64, TArray> 改成 TMap<uint64, TSet>,JoinBy 的 lambda 参数类型必须跟着改;ToString 不用改。
这不是 LexToString(只覆盖标量),也不是 JSON / UPROPERTY 反射 / 蓝图节点。