[英]Lua How to tell 1 from 1.0
我有一個配置腳本,用戶可以在其中輸入值作為絕對值或百分比值。
絕對值寫為0.0到1.0之間的值,而百分比值寫為0到100。
我如何區分1和1.0? 如果我要使用字符串,那么肯定不是問題...我希望保持這種配置簡單而不必依賴字符串。
這有可能嗎?
概括:
a = 1
b = 1.0
如何判斷a
與b
類型不同。
編輯配置文件如下所示:
local config = {}
-- A lot of comments describing how to configure
config.paramA = 1
config.paramB = 1.0
return config
在我的處理腳本中,我讀了這樣的配置:
config = require 'MyConfigFile'
config.paramA
config.paramB
使用Lua 5.3時, 整數數據類型允許在整數和浮點數之間有所不同,並且在某些情況下提供更好的性能。 math.type是獲取數字子類型的函數。
local x = 1.0
print(math.type(x)) -- float
x = 1
print(math.type(x)) -- integer
如果您的百分比值也應該是浮點數,那么William已經稱之為:“數字是一個數字”。 您必須在號碼中添加其他信息以區分,例如將其打包在帶有標識符的表中。 因為你只有2個案例,布爾值將是一個廉價的解決方案。
從PIL你可以看到一個數字是一個數字,因此在使用它們時無法區分1
和1.0
,因為它們具有相同的類型
解決問題的方法是使用包含值和類型的表:
config.paramA = { 1, 'i' }
config.paramB = { 1.0, 'd' }
或者在轉換為整數之前使用字符串並解析它:
config.paramA = '1'
config.paramB = '1.0'
使用Lua 5.1和5.2沒有區別,從luac
輸出( luac -i
)可以看出,因為local a, b = 1, 1.0
luac -i
生成以下代碼:
main <1.lua:0,0> (3 instructions, 12 bytes at 007D04E8)
0+ params, 2 slots, 0 upvalues, 2 locals, 1 constant, 0 functions
1 [1] LOADK 0 -1 ; 1
2 [1] LOADK 1 -1 ; 1
3 [1] RETURN 0 1
Lua 5.3允許使用math.type來區分兩者,因為它們具有不同的子類型。
作為您特定問題的解決方案,如果您確實想要使其成為非整數,則可以在數字上添加一個非常小的增量: 1.0000001
而不是1.0
。
一些建議:
1)只允許兩種格式中的一種
2)使用函數使格式顯式化
config.paramA = percent(1.9)
config.paramB = portion(1)
這些函數可以創建具有類型信息的表,或者只是將值轉換為一致的類型
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.