freemarker 通过引用或值分配?它有什么缺点吗?

freemarker assign by reference or by value? Has it any disadvantages?

我正在做一个使用 ftl 的项目。 我正在广泛使用 <#assign>,所以我想知道一直使用它有多安全。它是按引用存储还是按值存储?问题是我在 for 循环中连续分配一个矩阵或 table。我不确定我是否正确使用它,但它可能会导致我的系统崩溃。它与Java的Heap或Stack有密切关系吗?我的数据处理量很大。

#assign 做什么并不重要。重要的是您使用什么运算符来操作这些矩阵。 FreeMarker 运算符假设所有数据结构(如 List-s 或 Map-s)都是不可变的,因此它们不会修改支持(包装)List-s 或 Map-s。但是如果你在那些对象上调用 Java 方法,这取决于你调用的方法。就像如果你在 Map 上调用 put(key, value),那么 Map 将被修改。 (但默认情况下,FreeMarker 甚至不公开 Map-s 和 List-s 的 Java 方法。模板通常不应该修改数据模型,所以 FreeMarker 使相当难不小心做。)