我正在尝试用 Lava(Perl 语言,已扩展用于采矿软件 Vulcan)编辑脚本。
我遇到了模块问题,由于我不习惯 Perl,所以无法完全解决它。
下面是代码片段
引起问题的模块是“Macro”。
use Lava;
use warnings;
use strict;
use vulcan;
use utf8;
use Macro 'RunMenu';
use File::Basename;
my $tri = 'C:\\_PROJECTS\\1404134_abc\\VULCAN\\faults.tri\\retriangulated\\gbc_ne1e_1606.00t';
my $tr = new Triangulation($tri);
#Runs fine
RunMenu("TRI_UTE_LOAD:$tri","abort",
"FINISH") || die "Macro mismatch.\n";
#Does not run fine
RunMenu("TRI_EDIT_INTERP","abort",
sub { Triangulation("$basedir\\$tri"); },
sub { PanelResults("Select interpolation option",
"line" => "",
"Maximum triangle area " => "$maxTriArea",
"Maximum boundary length" => "100.0",
"button_pressed" => "ok",
"Interpolate midpoints" => "1",
"Interpolate centroids" => "0",
"Honour breaklines" => "1"
); },
"FINISH") || die "Macro mismatch.\n";
如果我省略 use Macro;
这行 my $tr = new Triangulation($tri);
运行正常,但我无法使用 RunMenu
命令。
如果我包含use Macro;
,我会得到在C:\_PROJECTS\1404134_abc\VULCAN\new.lava第12行,靠近“新三角测量”的运算符(operator)期望的位置找到Bareword
(需要预先声明new吗?)
我得到的最接近的是 use Macro 'RunMenu';
但随后我得到 Undefined subroutine &main::Triangulation Called at C:\_PROJECTS\1404134_abc\VULCAN\test4.lava第 45 行。
我相信正在发生的是Macro
包含一个函数triangulation
,它正在覆盖其他模块中的一个函数(不知道它在哪个模块中或如何找到出来,我尝试注释掉我加载的其他内容,并且在没有所有内容的情况下运行良好)。
当我不知道一个三角测量函数来自哪里时,关于如何使用这两个不同的三角测量函数,有什么建议吗?或者,如果有人可以提出任何其他修复建议,我们将不胜感激。
代码正在通过 Vulcan 运行,因此我不确定可以使用哪种 Perl 调试工具。
编辑:
如果您有兴趣,我已经复制了下面的帮助文件 Help file
最有用的部分在这里
三角测量类
三角测量对象提供了 Envisage 三角测量结构的接口(interface)。可以通过成员函数访问点和三角形数据。
每个三角形由 3 个顶点索引组成。这些是点数组的索引,该数组保存每个点的 3D 位置。三角形是使用三组 3D 点作为顶点形成的。
方法: $triangulation = new Triangulation($name)
$triangulation : Returned triangulation object.
$name : Optional triangulation name.
构造函数返回一个新的三角剖分对象。如果提供了名称,则加载给定名称的三角测量。
$结果= is_valid
$result : Whether a triangulation has been successfully loaded or set.
$points = 积分
$points : The number of points in the triangulation
$三角形=三角形
$triangles : Number of triangles in the object
最佳答案
看来 Triangulation 同时是一个类和函数名称。 Perl 不知道你想使用哪一个,但你可以通过在函数调用后使用括号来帮助它,你还应该避免方法的“间接对象”语法,并可能引用类名或附加 ::
给他们:
my $tr = 'Triangulation'->new($tri);
# or
my $tr = Triangulation::->new($tri);
避免:
my $tr = new Triangulation($tri);
Triangulation "$basedir\\$tri";
关于perl - 当某个模块的功能未知时,如何管理多个模块中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42169183/