0

とにかく、ドット区切り記号「。」を使用してIDを生成できるプログラムを実装する方法があるかどうかを尋ねたい. たとえば、次のようにします。

a1.b2.c3 

ドットを文字として扱いたくないことに注意してください。ドットはセパレータのようにする必要があります。

次のように、自分の名前と父の名前と祖父の名前の間にドットを入れても同じです。

John.Paul.Hit
4

3 に答える 3

6

指摘されているように、これはすでに実行できます。ただし、効率が低下することを認識する必要があります。

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 よりもはるかに多くのストレージを使用していることを確認してください。

また、AB と AC は MATLAB の異なるオブジェクトではなく、同じ構造体 A の一部であることを認識する必要があります。実際、今 AB を作成しようとすると、A が既に double として存在するため、動揺します。

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

元の変数 A は存在しません。

時間の問題もあります。構造体の効率が低下します。

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

A に 2 を足すのは非常に速いため、時間の測定に問題があることを確認してください。しかし、BCD に 2 を足すと、30 倍の時間がかかります。

したがって、最終的には、構造体を使用して必要なことを実行できる場合がありますが、ドットが非常に有効に必要でない限り、そうしないのには十分な理由があります。私が示した点では、別のセパレーターの方がうまく機能します。

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              

計算は、これらの変数のどちらでも等しく高速になります。

于 2012-10-22T10:26:04.733 に答える
2

Matlab は、ID、特に構造体とそのフィールドの ID の区切り記号としてドットを既に使用しています。たとえば、

a.b = 3

は、それ自体が value をa持つ というフィールドで呼び出される構造体を作成します。および 関数のトピックに関するドキュメントを参照してください。b3structuresstruct

于 2012-10-22T09:24:41.013 に答える
0

あなたが望む方法ではありません。上記の回答が示すように、ドットはML構文で特定の意味を持ち、識別子自体の一部として使用することはできません。

于 2012-10-23T08:47:12.030 に答える