TEXT型のCONTAINSの不思議な仕様
配列作成時の無限ループについて - UE4 AnswerHub
「昨日ちょっと体調が悪かったからAnswerHub見てたら、Text型の配列のCONTAINSが上手く動かないという話を見かけて、実際試したら動かなかったのでText型だとまずいってのはわかったんだけど、何か気になるので更に追加で調べてみた」
どちらもIntegerからのToText
「これが問題を再現するためのコードなんだけど、明らかに違うTextが生成されてるし、==で比較すればfalseなのに、なぜかCONTAINSで調べるとtrueになる」
妹「CONTAINSってなんだっけ?」
「配列の中にそれがあるかどうか、あればtrueを返すノードなんだけど、無いのにtrueを返してしまう。そして実験するとさらなる問題がわかってきた」
どちらもStringからのToText
「StringからToTextしても同じ結果になる。ただし、StringからのToTextと、IntegerからのToTextだったら別と判定するらしく」
StringからのToTextと、IntegerからのToTextで比較
「こうすると、同じ文字列なのにCONTAINSの結果はfalseになる。この実験の結果わかることはText型を生成するノードが同じならCONTAINS的に同じと判断されるらしい」
MakeLiteralTextで作ったテキストは正常に判断される
「どうしてこういうややこしいことになってるかというのは、たぶんText型の性質の問題なんだろうけど、具体的なところはよくわからない。CONTAINS以外にもそういう変な挙動をする部分があるかも」
妹「バグってことはないの?」
「たぶん違うと思う」
妹「でもそうすると、どう気をつけたらいいのか。ウィジェットとかTextじゃないと駄目なやつ結構あるでしょ?」
「文字が同じかどうかということについてText型をあてにしないということかなあ。そういう場合はStringでやる。実際問題としてText型を使うのって翻訳する時に便利だからで、でも翻訳することで違う文字になったり、同じ文字になったりする可能性もある。表示しない部分には翻訳が必要ないからStringでいい」