downtown hat geschrieben:
Christian85 hat geschrieben:
Gibt es noch einen Trick mit dem das Array "im_freq" in meiner Methode global setzen?
Klar, indem du
im_freq GROSS schreibst, also
IM_FREQ (überall im Code)
Wobei das Großschreiben eine Konstante definiert. (was jetzt im Falle eines Arrays nicht heißt, das der Array-
Inhalt konstant ist, sondern der Array an sich. Und Konstanten in Ruby auch überschrieben werden könnten.
Globale Variablen definiert man eher mit $, also hier $im_freq.
Es gilt aber auch: Globale Variablen sind pfui. Bei kleinen Skripten evtl. noch tolerierbar, aber sonst nicht so ideal.
Nachtrag: Ich habe deinen Code mal schnell in eine Klasse integriert.
Vorteil: Keine globalen Variablen.
Nebenvorteil:
Durch den Austausch von eingabe mit testeingabe kannst du auf die Schnelle einen Test machen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#!/usr/local/bin/ruby -w
class Sitzung def initialize() #Array´s @pf=[] @im_freq=[] end #Methoden def intermodulation_1(f1,f2) @im_freq << f1+f2 @im_freq << f2+f1 @im_freq << f2-f1 end def eingabe()
puts "Frequenzen eingeben"
while ((i=gets.chomp).downcase!="e") @pf<<i.to_f @pf.sort! end end def testeingabe(*args) args.each{|f| @pf << f.to_f } end def ausgabe() puts "Sie haben folgende Frequenzen eingegeben:" puts @pf.class @pf.each do |f| puts "#{f} MHz" end
unless @pf.empty? puts "PF-Array ist noch nicht leer" f1 = @pf[0] f2 = @pf[1] unless f2.nil? im_freq = intermodulation_1(f1,f2) @pf.shift end end end end #Sitzung
sitzung = Sitzung.new #~ sitzung.eingabe sitzung.testeingabe(1,3,5,7,8,4,2,9) sitzung.ausgabe
|
Beim unless @pf.empty? vermute ich einen Denkfehler. Bin jetzt aber auf die Schnelle auch nicht dahinter gekommen was du genau willst.