在不转向面向对象代码结构的情况下,将许多参数传递给脚本中的许多函数的更简洁的方法?

A cleaner way to pass many parameters into many functions in a script, without moving to object-oriented code structure?

我正在寻找一些 style/best 练习建议。我经常发现自己编写的脚本需要在开始时定义许多(几十个)参数。然后这些参数被脚本中的许多函数使用。一个最小的简化示例可能如下所示:

params.var1 = 1;
params.var2 = 10;
params.var3 = 100;
params.var4 = 1e3;

result1 = my_func1(params);
result2 = my_func2(params);

现在,我不想将很多输入传递给每个函数,所以我不愿意做类似 result1 = my_func1(var1,var2,var3,var4,...) 的事情。因此,我总是发现自己让每个变量成为一个结构的字段(例如 params),然后将这个结构单独传递给每个函数,如上。结构没有被函数修改,只是参数用于进一步的计算。

其中一个函数可能如下所示:

function result = my_func1(params)

var1 = params.var1;
var2 = params.var2;
var3 = params.var3;
var4 = params.var4;

result = var1.^2 + var2.^2 -var3.^3 + var4;

end

现在,因为我不想将函数中的每个变量都称为 params.var1 等(为了使 result 的表达式尽可能清晰),我首先使用 var1 = params.var1.

在开始时进行所有这些拆包

我想在这种情况下最好的做法可能是使用 类(因为我有一些数据并且还想对这些数据执行函数)。有没有更好的方法让我在不完全转向面向对象代码的情况下做这种事情?

您可以定义常量函数:

function out = var1
  out = 1; 
end
function out = var2
  out = 10; 
end

function result = my_func1
  result = var1.^2 + var2.^2;
end

根据您的实际应用,您可以传递数字数组:

var = [var1 var2 var3 var4]; 
my_func1(var);

my_func1(var1,var2,var3,var4,...) 在我看来优于传递结构。

我只想把拆包放在一边。在函数内部调用 struct params 一些更短的东西,以尽量减少混乱:

function result = my_func1(p)
result = p.var1.^2 + p.var2.^2 - p.var3.^3 + p.var4;
end

我会在其他地方继续称呼它 params,这样您就不必处理神秘的名称。