2016-09-13 20 views
2

データ型内で固定サイズの配列フィールドを宣言するにはどうすればよいですか? 私は、CPUという複合データ型を作成しています。フィールドの型を配列型として設定することはできますが、サイズをインスタンス化できますか、または明示的なコンストラクタを作成する必要はありますか?配列フィールドを持つ複合データ型

type CPU 
     //how do I declare memory as an Int8 array of size 64K 
//memory::Array{Int8,1} 
//memory = Array{Int8,64000}? 
    OpCode::Int8 
    Operand::Int8 
    Condition::Int8 
    PC::Int64 
end 
+1

これについて別の質問をすることをおすすめします。クリスは私の意見では、最初にあなたが提出した質問に答えて、すでに良い仕事をしていました。この改訂版は今やかなり異なっています。 2つの質問が別々の場合は、サイトの今後のユーザーにとってさらに便利で、質問が動いているターゲットにならない場合は質問に回答する人にはさらに良いでしょう。 –

+2

こんにちは@JJTO、スタックオーバーフローへようこそ!あなたの最初のリビジョンにあなたの質問をロールバックしました。新しい質問を別にお聞きください。これは、同様の質問をしている他のユーザーにとってさらに役立つためです。 –

+0

あなたはあなたの質問の一番下にある「編集したx時間前の」リンクをクリックして、あなたのリビジョンに書いたものを(新しい質問に移動する目的で)取り出すことができます。衡陽のロールバックの前にあった投稿の全文を見るには、「横並び」のリンクをクリックしてください。 –

答えて

6

アレイタイプにはサイズパラメータがありません。メモリのタイプはVector{Int8}(またはArray{Int8,1},Vectorは1次元配列のエイリアスに過ぎません)。内部コンストラクタを使用してサイズをチェックしたり、エラーをスローすることができます。

安全性をさらに向上させるために、配列だけを持つ新しい型を作成し、lengthgetindexなどのディスパッチを定義して、保持する配列への配列インターフェイスを作成することはできますが、サイズを変更します。これはおそらく過剰です(そして配列であるフィールドをつかんでも、サイズを変更できます)。

FixedSizeArraysまたはStaticArraysは、配列が大きすぎるため(コンパイル時間が長くなるため)、ここでは適用できません。

+0

はい、私はあなたのように内部のコンストラクタを使用し、それは動作します。助けてくれてありがとう。しかし、私はまだあなたが2番目の段落で何を意味するのか理解していない...引数の1つとして長さを持つ配列型の新しいコンストラクタを作成すると言っていますか?しかし、Typeで固定サイズの配列をインスタンス化できないと思いましたか?申し訳ありませんが、私はまだC/C++の観点から、構造体を任意の長さの配列で簡単に作成することができると考えています。なぜ私はJuliaでなぜ同じことをすることができないのかについて頭を浮かべることができません。 – JJTO

+0

'Array {Int8,1}'をフィールドとして使うと、それは任意の長さの配列を持つ型ですので、意味が分かりません。 2番目の段落で私が言っているのは、配列に 'resize!'関数があるのが気に入らなければ、配列である1つのフィールドを持つ不変型を定義し、この新しい配列の振る舞いをすべての配列関数を自分で定義します(つまり、 'length'は唯一のフィールドである配列の長さを計算します)。この新しい配列型にオーバーヘッドはありませんが、これは過剰です。 –

+0

型と一緒にメモリを宣言したいという場合は、配列のフィールドには配列ではなく配列へのポインタが格納されていることに注意してください自体。型を定義するために既に配列を定義しなければならないので、2つの定義を持つと余計なコピーを作成するので、型の配列のメモリを宣言することは望ましくありません(したがって、同じメモリを指し示すだけで入力してください)。それはあなたが求めていることですか? –

関連する問題