2017-05-02 8 views
0

以下は私のコードです。hY47x1です。下付き文字:sum = sum(s)

s = h-Y; 
sum = sum(s); 

私はこのエラーを取得しています:

error: sum(6057.48): subscripts must be either integers 1 to (2^31)-1 or logicals

誰かが理由を説明していただけますか?

+2

"sum = sum(..)"、オクターブについては何も分かりませんが、ここに名前を付けることに問題がありますか? "sum ="は、識別子 "sum"を何かに再定義した後、 "identifier(x)"にxが整数または論理であることが必要であると文句を言いますか? 'something = sum(s)'を試してみてください。 –

+3

新しく作成された 'sum'変数を使って組み込みの' sum'関数を隠しました。名前を変更した後でも、同じエラーを受け取る組み込み関数である変数または関数を決して指定しないでください。 –

+0

@SardarUsama –

答えて

2

サルダールウサマ・によってコメントで述べたように、あなたはまた、組み込み関数sumを使用する場合は、変数名sumを使用することはできません。

デフォルトでは、sumは関数であり、スクリプトで動作することが期待されています。オクターブで

、あなたは組み込み関数を曇らせることが許可されている、例えば

sum = 4; % Now there is a workspace variable, sum, with the value 4 

あなたがこれを行うと、キーワードsumは今変数ではなく、機能の略です。そのスクリプトでそれらを使用する予定がない場合でも、デフォルトの関数を上書きしないことを強くお勧めします。


だけ変数をクリアし、あなたのovershadowingを削除するには、続行する前に変数をクリアする必要があります

clear sum % Now it should behave as expected. 

理由は、ワークスペースで行うことです。変数sumは、プログラムが終了してもワークスペースに残ります。新しい変数名を選択したとしても、再度実行すると、まだsumの解釈方法は変更されています。変数をクリアすることにより、Octaveはワークスペースから削除されたときのデフォルトの動作に戻します。


要約:別の変数名を使用してください。

s = h-Y; 
mysum = sum(s); % mysum isn't a built-in, so no clashes here!