私はこの機能を持っています:
function SecondsFormat(X)
if X <= 0 then return "" end
local t ={}
local ndays = string.format("%02.f",math.floor(X / 86400))
if tonumber(ndays) > 0 then table.insert(t,ndays.."d ") end
local nHours = string.format("%02.f",math.floor((X/3600) -(ndays*24)))
if tonumber(nHours) > 0 then table.insert(t,nHours.."h ") end
local nMins = string.format("%02.f",math.floor((X/60) - (ndays * 1440) - (nHours*60)))
if tonumber(nMins) > 0 then table.insert(t,nMins.."m ") end
local nSecs = string.format("%02.f", math.fmod(X, 60));
if tonumber(nSecs) > 0 then table.insert(t,nSecs.."s") end
return table.concat(t)
end
週と月を追加したいのですが、月の日が常に同じであるとは限らないという理由だけで、月の部分に頭を悩ませて週の部分に進むことができません。
2 番目の質問は、(グリッド内の) 最大 100 項目に対して関数が 3 秒ごとに呼び出されることを考えると、これを処理する最も効率的な方法は、結果を格納するためにテーブルを使用することですか?
編集:
function ADownload.ETA(Size,Done,Tranrate) --all in bytes
if Size == nil then return "--" end
if Done == nil then return "--" end
if Tranrate == nil then return "--" end
local RemS = (Size - Done) / Tranrate
local RemS = tonumber(RemS)
if RemS <= 0 or RemS == nil or RemS > 63072000 then return "--" end
local date = os.date("%c",RemS)
if date == nil then return "--" end
local month, day, year, hour, minute, second = date:match("(%d+)/(%d+)/(%d+) (%d+): (%d+):(%d+)")
month = month - 1
day = day - 1
year = year - 70
if tonumber(year) > 0 then
return string.format("%dy %dm %dd %dh %dm %ds", year, month, day, hour, minute, second)
elseif tonumber(month) > 0 then
return string.format("%dm %dd %dh %dm %ds",month, day, hour, minute, second)
elseif tonumber(day) > 0 then
return string.format("%dd %dh %dm %ds",day, hour, minute, second)
elseif tonumber(hour) > 0 then
return string.format("%dh %dm %ds",hour, minute, second)
elseif tonumber(minute) > 0 then
return string.format("%dm %ds",minute, second)
else
return string.format("%ds",second)
end
end
おそらくもっと速いだろうと思ったので、関数をメイン関数にマージしましたが、2つの質問があります。
1: 追加する必要がありました
if date == nil then return "--" end
date:match で "nil" と比較しようとするとエラーが発生することがあるため、os.date は文字列またはテーブルとして nil を返すことについて文献に何も言及していないため、追加のコード行で問題が修正されますが、なぜそれが不思議なのか疑問に思っています以前のリターンですべての非イベントをキャッチしたと確信しているため、動作が発生しますか?
2: myfunction(...) のように記述された関数を時々見かけますが、それは単に引数を省略しているだけだと確信しています。そうであれば、最初の 3 つの「if」ステートメントを省略できる 1 行のコードはありますか?