Luauが演算、連結、または割り当てなどの操作で値や変数を使用しようとしたとき、値がその操作が期待する型でない場合、Luauはその値を変換(強制変換)してデータ型を変更します。強制変換はその操作の実行時に発生し、変数の値を変更することはありません。
算術
Luauは算術操作において文字列を数値に強制変換します。この動作はLuauに組み込まれています。算術のために型が互換性がない場合、Luauはエラーをスローし、スクリプトの残りを実行しません。たとえば、文字列が数値を表していない場合、文字列を数値に加えることはできません。
print(100 + "7") -- 107print(100 - "7") -- 93print("1000" + 234) -- 1234print("1000" - 234) -- 766print("hello" + 234) -- エラー: 算術 (加算) において文字列と数値を操作しようとしました
連結
連結では、Luauは数値を文字列に強制変換します。強制変換を使用せずに数値を文字列に変換するには、string.format()関数を使用します。
print("πは " .. math.pi) --> πは 3.1415926535898print("πは " .. 3.1415927) --> πは 3.1415927-- 小数点以下3桁に丸めるprint("πは " .. string.format("%.3f", 3.1415927)) -- πは 3.142
割り当て
特定のデータ型、例えば列挙型や文字列を期待するプロパティもありますが、異なる型の値を割り当てることができ、Luauはその値をプロパティが期待する型に強制変換します。
列挙型
Luauは、列挙型の値の数値や文字列を完全な列挙名に強制変換します。たとえば、Part.Materialプロパティの値を数値、文字列、または完全な列挙名で指定できますが、print()関数は常に完全な列挙名を表示します。明示的に完全な列挙名を使用することが最良のプラクティスです。列挙型の詳細については、列挙型を参照してください。
local Workspace = game:GetService("Workspace")local part1 = Instance.new("Part")part1.Material = 816part1.Parent = Workspaceprint(part1.Material) -- Enum.Material.Concretelocal part2 = Instance.new("Part")part2.Material = "Concrete"part2.Parent = Workspaceprint(part2.Material) -- Enum.Material.Concrete-- これは最良のプラクティスです。最も明示的だからです。local part3 = Instance.new("Part")part3.Material = Enum.Material.Concretepart3.Parent = Workspaceprint(part3.Material) -- Enum.Material.Concrete
一日の時間
Lighting.TimeOfDayプロパティは、夜、昼、またはその他の時間を定義するもので、DateTimeデータ型の文字列表現です。Lighting.TimeOfDayに数値を割り当てると、LuauはそれをDateTimeの文字列表現に変換します。
local Lighting = game:GetService("Lighting")Lighting.TimeOfDay = "05:00:00"print(Lighting.TimeOfDay) -- 05:00:00Lighting.TimeOfDay = 5print(Lighting.TimeOfDay) -- 05:00:00