我習慣ConTeXt
以半自動的方式標記我的學生。我的評論和成績儲存在資料集變數中,如下面的 MWE 所示。我正在嘗試使用Lua
受 wiki 啟發的函數自動求和點Lua
。不幸的是,我不知道如何將定義的整個表傳遞\setdataset
給Lua
巨集。
\startluacode
userdata = userdata or {}
-- http://lua-users.org/wiki/SimpleStats
function userdata.somme(n)
local sum=0
-- loop sur key=value d’une table
for k,v in pairs(t) do
-- si c’est un nombre, on ajoute à la somme
if type(v) == 'number' then
sum=sum+v
end
end
return sum
end
\stopluacode
%how to declare a whole list?
\def\Total#1{userdata.somme(#1)}
\setdataset [Exercice] [Astérix]
[introduction={Nice try},
PointsIntro={1},
conclusion={where is it?},
PointsConclusion={0},
Bonus={did you take your magic potion?},
PointsBonus={},
]
\setdataset [Exercice] [Obélix]
[introduction={too big},
PointsIntro={1},
conclusion={don't hurt me!},
PointsConclusion={0},
Bonus={you didn't need any magic potion},
PointsBonus={1},
]
\starttext
\Total{Astérix}
\Total{Obélix}
\stoptext
\datasetvariable
僅返回一個變量,而不是整個表,並且我對文件中的數據結構有點迷失*tuc
。如何聲明我的 Total 函數以將所有Asterix
鍵和值(即 Astérix 的表)作為變數傳遞?
我期望\Total{Astérix}
返回 1 和\Total{Obélix}
返回 2。
我懷疑在 中完成整個事情可能會更容易Lua
,但我還無法做到。
答案1
我所有的使用嘗試都dataset
失敗了。感謝@Wolfgang Schuster,我明白這是一個格式問題,玩起來tonumber
並沒有解決。一個可行且更短的解決方案是將這些表直接儲存在 lua 中。對於記錄和那些像我一樣的 lua 新手來說,字串在引號內,數字不在。
\startluacode
userdata = userdata or {}
-- http://lua-users.org/wiki/SimpleStats
function userdata.somme(t)
local sum=0
-- loop on table key=value
for k,v in pairs(t) do
-- if it is a number, then sumed
if type(v) == 'number' then
sum=sum+v
end
end
return sum
end
Astérix = {
introduction="Nice try",
PointsIntro=2,
conclusion="where is it?",
PointsConclusion=0,
Bonus="did you take your magic potion?",
PointsBonus=0,
}
Obélix = {
introduction="too big",
PointsIntro=1,
conclusion="don't hurt me!",
PointsConclusion=2,
Bonus="you didn't need any magic potion",
PointsBonus=0,
}
\stopluacode
\starttext
Astérix: \ctxlua{context(userdata.somme(Astérix))}
Obélix: \ctxlua{context(userdata.somme(Obélix))}
\stoptext