Bitte helft mir!! Ruby Fehler im Quellcode :-(
Stefano
- sonstiges
Hallo zusammen!
Ich bin neu in Ruby und habe ein Problem. Ich hoffe, dass mir jemand helfen kann.
Wenn ich eine feste Zahl (z.B. 5) anstatt ob.num1 eingebe, dann funktioniert das Programm. So aber nicht:
require 'win32ole' #Modul, das Ruby-Script mit Win-Anwendung verkn¸pft
ChartTypeVal = -4100 # -4100 ist die Excel-Diagramm-Konstante
excel = WIN32OLE.new("excel.application")
class TestClass
def input(num1,num2,num3)
@num1=num1
@num2=num2
@num3=num3
end
attr_accessor :num1
attr_accessor :num2
attr_accessor :num3
end
ob = TestClass::new
print 'First number: '
ob.num1=gets
print 'Second number: '
ob.num2=gets
print 'Third number: '
ob.num3=gets
excel['Visible']=TRUE
excel.Workbooks.Add()
excel.Range("a1")['Value']=ob.num1
excel.Range("a2")['Value']=ob.num2
excel.Range("a3")['Value']=ob.num3
excel.Range("a1:a3").Select()
excelchart=excel.Charts.Add()
excelchart['Type']=ChartTypeVal
i=10
i.step(360,10) do |rot|
excelchart.rotation=rot
end
Hallo Stefano,
[...]
1. Warum machst Du einen neuen Thread auf?
2. Wie Cheatah Dir im ersten Thread schon gesagt hat, brauchen wir mehr Informationen:
- Was willst Du erreichen?
- Was funktioniert nicht?
- Was passiert bzw. passiert nicht?
- Wie lautet die Fehlermeldung?
Grüße
Andreas
Hallo zusammen!
hallo
Wenn ich eine feste Zahl (z.B. 5) anstatt ob.num1 eingebe, dann funktioniert das Programm. So aber nicht:
die anderen haben dir ja schon gesagt, was Du machen müsstest damit man kompetent helfen kann:
trotzdem will ich mal nicht so sein, Ruby liesst eingaben der Komandozeile als Strings ein, du musst ihm sagen, dass es Zahlen sein sollen.
print 'First number: '
ob.num1=gets.to_i
^^^^^^^^^^^^^^^^^^^^^^^
für weitere Infos dazu empfehle ich
http://www.math.hokudai.ac.jp/~gotoken/ruby/ruby-uguide/uguide07.html
<tip>also nicht gleich wegrennen, hier gibt es viele Leute, die dir helfen wollen, aber die solltest Du nicht vergraulen, mit Feststelltastenterror und unzureichenden Fehlerbeschreibungen. Niemand kann hellsehen und es sind alles Menschen und keine Antwortmaschinen hier</tip>
ciao
romy
Hallo romy,
trotzdem will ich mal nicht so sein, Ruby liesst eingaben
der Komandozeile als Strings ein, du musst ihm sagen, dass
es Zahlen sein sollen.print 'First number: '
ob.num1=gets.to_i
^^^^^^^^^^^^^^^^^^^^^^^
Nee, du, das ist nicht noetig. Ruby hat, genau wie Perl oder
PHP, eine automatische Typenkonvertierung. Nur in sehr wenigen
Faellen muss explizit (implizit passiert das sowieso, durch
die automatische Typenkonvertierung) String#to_i aufgerufen
werden.
Gruesse,
CK
hallo Christian,
Nee, du, das ist nicht noetig. Ruby hat, genau wie Perl oder
PHP, eine automatische Typenkonvertierung. Nur in sehr wenigen
Faellen muss explizit (implizit passiert das sowieso, durch
die automatische Typenkonvertierung) String#to_i aufgerufen
werden.
Bist Du Dir sicher?
Bei meinem ersten Beispielprogramm hatte ich dasselbe Problem.
Ich wollte einfach nur 2 Werte einlesen a la a= und b=
und dann die Addition der beiden ausgeben und immer bekam ich
34 wenn a=3 und b=4 war. Also hat er sie als Strings behandelt.
Sobald ich to_i eingefügt hatte, ging es.
Ich weiss das Ruby automatisch den Typ erkennt, aber beim Einlesen von der Kommandozeile scheinbar (IMHO) nicht. (ausser vielleicht, wenn die Variable vorher schonmal definiert war als integer oä. (IMHO))
Aber wenn Du mehr weisst als ich, wäre ich froh, wenn Du mir die genaue Sachlage mal erklären könntest.
ciao
romy
Hi romy,
Bei meinem ersten Beispielprogramm hatte ich dasselbe Problem.
Ich wollte einfach nur 2 Werte einlesen a la a= und b=
und dann die Addition der beiden ausgeben und immer bekam ich
34 wenn a=3 und b=4 war. Also hat er sie als Strings behandelt.
Sobald ich to_i eingefügt hatte, ging es.
also von ruby habe ich nun zwar exakt überhaupt keine Ahnung ... aber Dein Effekt und Christians Aussage, ruby besitze implizite Typkonversion, stehen nicht in Widerspruch zueinander.
Wenn Du zwei Variablen mit einem Operator verknüpfst, der nur für bestimmte Datentypen überhaupt definiert ist, dann erwarte ich von einer Sprache mit impliziter Typkonversion, daß sie die Typen automatisch umwandelt.
Aber ist "+" ein solcher Operator? Falls der nämlich sowohl für integer als auch für strings (und in beiden Fällen unterschiedlich) definiert wäre (bei JavaScript ist das beispielsweise so), würde die Sprache nicht wissen, was von beidem Du gemeint hast, und dann keine Chance haben, richtig zu raten. Dies würde exakt Dein Ergebnis "34" erklären.
Probiere doch mal andere Operatoren aus, um meine Theorie zu testen ...
Ich mag keine Sprachen mit überladenen Operatoren, und Dein Fall ist genau der Grund dafür.
Viele Grüße
Michael
Hi Michael,
Probiere doch mal andere Operatoren aus, um meine Theorie zu testen ...
mach ich, muss ich aber zu Hause machen, da ich hier keine kein ruby habe...ich berichte morgen!
ciao
romy
Hallo Michael,
Aber ist "+" ein solcher Operator? Falls der nämlich sowohl
für integer als auch für strings (und in beiden Fällen
unterschiedlich) definiert wäre (bei JavaScript ist das
beispielsweise so), würde die Sprache nicht wissen, was von
beidem Du gemeint hast, und dann keine Chance haben,
richtig zu raten. Dies würde exakt Dein Ergebnis "34"
erklären.
Korrekt. In *diesem* Fall muss eine explizite Konversion
vorgenommen werden. In Stefanos Fall ist das jedoch (soweit
ich gesehen habe) nicht noetig.
Gruesse,
CK
Liebe Leute,
gestern hat Stefano mir per mail mitgeteilt, daß er sich bei einer Ruby-Newsgroup angemeldet hat und im Laufe des Tages ca. 50 mails bekommen hat. Sein Problem war aber trotzdem noch nicht gelöst. Auf meine mehrfache Aufforderung, den Wortlaut der Fehlermeldung die er bekommt hier zu posten, da hier ja noch über das Thema diskutiert wird, ist er nicht eingegangen. Es sieht also so aus, als würde ihn dieser Thread hier nicht mehr interessieren. Daher würde ich vorschlagen, Ihr macht euch keine Mühe mehr und vergesst die ganze Sache.
Grüße
Andreas
PS. Wie Stefano mir schrieb, bekommt er die Fehlermeldung nicht beim Einlesen der Zahlen, sondern weiter unten, beim Select().
Liebe Leute,
Danke euch allen für eure freundliche Hilfe. Leider konnte ich nicht so schnell wieder ins Forum schauen, aber vielen Dank für eure Unterstützung.
Viele herzliche Grüße,
Stefano