我想问是否有任何可以实现可以使用点隔离器生成ID的程序"。例如:
a1.b2.c3
请注意,我不想将其作为角色处理,它应该像一个单独的人。
相同
John.Paul.Hit
您已经可以做到了,如所指出的那样。但是,您应该认识到它的高效
A = 3;
B.C.D.E = 3;
whos A B
Name Size Bytes Class Attributes
A 1x1 8 double
B 1x1 536 struct
看到B比A的存储空间要多。
另外,您需要认识到A.B和A.C在MATLAB中不是不同的对象,而是同一结构的一部分A.实际上,如果我现在尝试创建A.B,它将会感到沮丧,因为A已经存在双。
A.B = 4
Warning: Struct field assignment overwrites a value with class "double". See MATLAB R14SP2 Release Notes, Assigning Nonstructure Variables As Structures
Displays Warning, for details.
A =
B: 4
原始变量不再存在。
也有时间问题。结构的效率将降低。
timeit(@() A+2)
Warning: The measured time for F may be inaccurate because it is close to the estimated time-measurement overhead (3.8e-07 seconds). Try measuring
something that takes longer.
> In timeit at 132
ans =
9.821e-07
timeit(@() B.C.D+2)
ans =
3.6342e-05
请参阅将2添加到A的速度是如此之快,以至于时间段难以测量它。但是在卑诗省添加2次的时间为30倍。
因此,最终,您可以通过结构来完成您想做的事情,但是有充分的理由不这样做,除非您对DOT有非常有效的需求。替代分离器在我所展示的方面更好。
A = 3;
A_B_C_D = 3;
whos A*
Name Size Bytes Class Attributes
A 1x1 8 double
A_B_C_D 1x1 8 double
与这些变量中的任何一个相同的计算将同样快。
matlab已经使用该点作为IDS中的分隔符,特别是在结构及其字段的ID中。例如,执行
a.b = 3
创建一个称为a
的结构,其中一个名为b
的字段本身具有值3
。阅读有关structures
和功能struct
的主题的文档。
不是您想要的。如上所述,该点在ML语法中具有特殊的含义,并且不能用作标识符本身的一部分。