2017-03-21 5 views
1

Ich verwende den CodeGrenzwertumfang Scilab Variablen

clc; 
clear; 
getd(); 

a=1; 
b=myFunction(); 

, wo myFunction durch

definiert
function b=myFunction() 
    b=a+1; 
endfunction 

. Aus irgendeinem seltsamen Grund funktioniert das in Scilab gut. Ich glaube, myFunction erbt einfach a von der Hauptfunktion. Dies steht im Gegensatz zu beispielsweise Matlab, wo a ein Eingabeargument von myFunction sein muss, um es zu verwenden.

Ich möchte Funktionen in Scilab nur mit lokalen Variablen und Variablen als Eingabe, wie in Matlab. Damit wird in diesem Fall a nicht von der Hauptfunktion übernommen.

Wie kann ich das erreichen?

+0

So funktioniert [variable scope] (https://wiki.scilab.org/howto/global%20and%20local%20variables) in Scilab. Um das zu ändern, können Sie den Scilab-Quellcode herunterladen, seine Engine neu schreiben und kompilieren. – FTP

+1

Aber warum willst du das erreichen? Wenn Sie korrekte Funktionsdefinitionen schreiben, d. H. ** all ** Ihre Eingabevariablen als Argumente in der Klammer definieren und Ihre Funktion mit der richtigen Anzahl von Eingabeargumenten aufrufen, vermischt Scilab Ihre lokalen und globalen Variablen nicht. In Ihrer Funktion können Sie sogar überprüfen, ob eine ausreichende Eingabe mit 'varargin' erfolgt. – Attila

Antwort

2

Dies funktioniert in Scilab gut, da der Interpreter, wenn eine Funktion eine nicht definierte Variable verwendet, diese im aufrufenden Bereich sucht. Obwohl es merkwürdig erscheint, funktioniert es so und ich denke, dass dieses Verhalten nicht geändert werden kann, ohne den Quellcode zu ändern, wie @NormalHuman sagte.

In Ihrem Beispiel funktioniert Ihr Code, weil Sie die Variable "a" im aufrufenden Bereich definiert haben, aber wenn Sie die Funktion in einer anderen Situation ausführen, könnte es fehlschlagen. Meiner Meinung nach hat eine auf diese Weise definierte Funktion einen Fehler in ihrem Code.

Ich benutze viel Scilab und ich sehe das nicht als ein echtes Problem, aber ich stimme dir zu, dass dieses Verhalten ziemlich seltsam ist und es sollte nicht existieren.

Wenn Sie jedoch Bedenken haben, eine Funktion zu entwickeln, die während des Schreibens des Codes aufgrund einer im aufrufenden Bereich definierten Variablen ordnungsgemäß funktioniert, besteht die Lösung darin, einige Komponententests zu erstellen und sie in einem sauberen Interpreter auszuführen .