簡體   English   中英

Lua如何從1.0中告訴1

[英]Lua How to tell 1 from 1.0

我有一個配置腳本,用戶可以在其中輸入值作為絕對值或百分比值。

絕對值寫為0.0到1.0之間的值,而百分比值寫為0到100。

我如何區分1和1.0? 如果我要使用字符串,那么肯定不是問題...我希望保持這種配置簡單而不必依賴字符串。

這有可能嗎?

概括:

a = 1
b = 1.0

如何判斷ab類型不同。

編輯配置文件如下所示:

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你可以看到一個數字是一個數字,因此在使用它們時無法區分11.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM