1

ユニバースの動的配列相対操作 (-1 を使用) が奇妙な動作をします。

以下の操作では、予期したように位置 <1,1,5> に新しい要素が追加されず、代わりに「1,1,5」が DYNAMIC.ARRAY<1,1,1> に追加されます。

DYNAMIC.ARRAY = '       '
DYNAMIC.ARRAY<1,-1,5> = '1,1,5'    ; *Adds to 1,1,1 not 1,1,5 when DYNAMIC.ARRAY contains only whitespaces before this operation

ただし、動的配列に空でない値が含まれている場合、同じ操作が期待どおりに機能します。以下のコードを実行した後の最終結果は、DYNAMIC.ARRAY<1,1,1> = '1,1,1' および DYNAMIC.ARRAY<1,2,5> = '1,2,5' になります。

   DYNAMIC.ARRAY = '      '
   DYNAMIC.ARRAY<-1> = '1,1,1'
   DYNAMIC.ARRAY<1,-1,5> = '1,2,5'    ; *Adds to right position 1,2,5 when DYNAMIC.ARRAY is initialised to non empty value before this operation

これはユニバースで予想される動作ですか?

4

3 に答える 3

0

動的配列にデータを挿入する際の「-1」の使用は、独自の規則を持つ特別な表記法です。-1 を使用することは、本質的に「最後の属性、値、またはサブ値の後に挿入する」ことを意味します (式のどこに -1 があるかによって異なります)。

あなたの最初の例では:

DYNAMIC.ARRAY = '       '
DYNAMIC.ARRAY<1,-1,5> = '1,1,5'

文字列 '1,1,5' を最初の属性の最後の MULTIVALUE の後に、5 番目のサブ値として配置すると言っています。「値」位置の-1は「最後の値の後に置く」と言っており、初期配列値が単一だったため、これにより文字列「1,1,5」が位置<1,2,5>に配置されると予想されますスペースの文字列、配列の場所 <1,1,1> に既に何かがあるため、-1 は新しい値の位置を追加し、5 はサブ値の位置を定義します。したがって、結果は <1,2,5> に配置された値です

あなたの2番目の例では:

DYNAMIC.ARRAY = '      '
DYNAMIC.ARRAY<-1> = '1,1,1'
DYNAMIC.ARRAY<1,-1,5> = '1,2,5'

配列をスペース文字列を含む単一の属性に設定する最初の行から始めます。次の行 (<-1> を含む) は、「値 '1,1,1' を持つ新しい属性を追加する」と言っています。これは、2 つの属性を持つ配列があることを意味します。3 行目 (<1,-1,5> を含む) は、文字列 '1,2,5' を最初の属性の最後の値の後に 5 番目のサブ値として挿入することを意味するため、結果が再び期待されます。文字列 '1,2,5' になる <1,2,5> に入る

私のコメントは、R83 Pick を使用して期待するものに基づいています。使用している UniVerse のバージョンまたは「アカウント フレーバー」について言及していないため、おそらくそれが問題の一部です。

空白の初期配列が UniVerse によって「空/null 属性」として認識されている可能性があります。最初の例で空白の値を「ABC」に変更すると、すべて期待どおりに機能すると思いますか?

于 2016-03-25T22:10:11.727 に答える