从变量定义表的键和关联值的问题

从变量定义表的键和关联值的问题

很抱歉我的问题不够准确,但我找不到正确描述我的问题的方法。

我创建了一个新包,在“lua”部分,我使用了两个类,一个用于点,另一个用于线。两个表zL与这些类相关联。第一个表中存储点,第二个表中存储线。例如对于点。这定义了词缀(复数)为的z.a = point: new (1,2)点。在此处的表中,键为,值为。以同样的方式,如果和被定义,我可以用例如来定义一条线。这有点复杂,因为表存储在表中。a1+2ia1+2iabL.a__b = line: new (z.a,z.b)

我可能错了,但我认为我的问题可以这样翻译:如果 x=a 和 y=b 那么我如何定义一个函数给我L.a__b = line: new (z.a,z.b)L.x__y等等。什么都没有给。

您可以在此页面找到此包tkz-元素。您将在档案中找到 tkz-elements 的代码、一份自述文件、一份小文档和几个示例。所有这些仍处于实验阶段!

以下是更完整的代码:

\documentclass{article}
\usepackage{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
\parindent = 0pt

\begin{elements}
z.a = point: new (0, -1)
z.b = point: new (4, 2)
z.c = point: new (1, 2)
z.d = point: new (-1, 3)
L.a__b = line: new (z.a,z.b)
L.a__d = line: new (z.a,z.d)
L.d__b = line: new (z.d,z.b)
   
va = tostring(c__d)
 for i in pairs(L) do
   if i == va then 
   else
      _, _,ft, sd = string.find( "c__d", "(.+)__(.+)" )    
      L["ft__sd"] = line: new (z.ft,z.sd)  -- wrong !
      --   L[ft"__"sd] = line: new (z.ft,z.sd)--  is fine D. Carlisle
     break
   end
 end

-- z.i =intersection_ll (L.a__b,L.c__d)
 -- the next code is here to show the different values
for i,k in pairs(L) do
 tex.print(tostring(k)..";"..tostring(i))
 for u,v in pairs(k)  
    do 
       tex.print(tostring(v)) 
  end
 tex.print('\\\\')
 end
\end{elements}

\begin{tikzpicture}
 \tkzGetNodes

 \tkzDrawLines[add=1 and 1](a,b c,d)
 \tkzDrawPoints(a,b,c,d,i)
\tkzLabelPoints(a,b,c,d,i)
\end{tikzpicture}
\end{document}

一些解释:定义了 4 个点,然后定义了 4 条线,但我注释了最后一条L.c__d以显示我的问题。如果定义了两条线,代码允许获取它们的交点。我想找到一个测试来了解其中一条线是否未定义,并在这种情况下自动创建它。注释后,L.c__d = line: new (z.c,z.d)此行不再定义。因此,我使用函数解析表示此行的表达式string.find并获取指向ft和的和。sdcd

问题:如何使用ftsd获取L.c__d = line: new (z.c,z.d)

在此处输入图片描述

答案1

当你通过连接所需点的索引来索引线时

L[ft .. "__" .. sd] = line: new (z[ft],z[sd])

用二维数组(表格中的表格)来建模线条可能会更简单,因此

L.c__d = line: new (z.c,z.d)
L[ft .. "__" .. sd] = line: new (z[ft],z[sd])

你可以使用

L["c"]["d"] = line: new (z.c,z.d)
L[ft][sd]   = line: new (z[ft],z[sd])

相关内容