2016-05-13 8 views
1

das ist mein Motto in einem IDL-Quellcode:Falsche Anzahl von Artikeln in IDL

pro gamow,t_plasma,z1=z1,z2=z2,a1=a1,a2=a2 

; displays gamow peak for input value of t (in K) 
; default values for protons 
    if not keyword_set(z1) then z1=1. 
    if not keyword_set(z2) then z2=1. 
    if not keyword_set(a1) then a1=1. 
    if not keyword_set(a2) then a2=1. 

Ich Ausführung dies im Terminal/Konsole, mit zum Beispiel:

Gamow, 1W8

Dies funktioniert, seit dann z1 = z2 = a1 = a2 = 1,0. Und 1d8 bedeutet 100 Millionen. Aber funktioniert das nicht:

Gamow, 1W8, 2, 2, 4, 4

warum?

Mit freundlichen Grüßen

Antwort

1

Sie definiert t_plasma als Positionsparameter, aber z1, z2, a1 und a2 als Keyword-Parameter. Ihr erstes Beispiel übergibt nur einen einzelnen positionalen Parameter, so dass t_plasma definiert ist, und die anderen Parameter nicht, was in Ordnung ist. Ihr zweites Beispiel versucht, alle 5 Argumente als Positionsparameter zu übergeben, aber nur ein Positionsparameter ist definiert. IDL meldet daher einen Fehler "Falsche Anzahl von Argumenten".

Stattdessen versuchen Sie dies:

gamow,1d8,z1=2,z2=2,a1=4,a2=4 
+0

Nur eine kurze Notiz - in Python Sie „keywords“ mit den tatsächlichen Keyword-Namen oder nur als Positionsargument angeben können - entweder man wird funktionieren, solange die Positions Argumente in der richtigen Reihenfolge. In IDL gibt es einen Unterschied zwischen Positionsargumenten und Schlüsselwortargumenten. Positionsargumente müssen in Ordnung sein, obwohl Sie nicht alle angeben müssen. Schlüsselwortargumente müssen den Keyword-Namen verwenden und sie können in beliebiger Reihenfolge stehen. [Anmerkung der Redaktion: Meiner Meinung nach ist der IDL-Ansatz besser, weil er die Lesbarkeit des Codes verbessert und mysteriöse Fehler vermeidet.] –

Verwandte Themen