Πέμπτη 5 Μαΐου 2016

Αναθεώρηση 4 (διόρθωση παλαιών Bug- προ 8.1)

Βρήκα μερικά Bug, και ιδιαίτερα ένα ενοχλητικό, το οποίο δημιουργούσε κατάρρευση του διερμηνευτή κατά την διόρθωση προγράμματος. Είχα βάλει ένα hook, στο messagebox το οποίο δεν χρειάζονταν (δεν δούλευε, παρά μόνο δημιουργούσε προβλήματα), οπότε αν ξέχναγε κανείς να βάλει ένα άγκιστρο στο κώδικα άνοιγε το Msgbox...και προετοιμάζονταν για crash..
(δεν το βρήκα γιατί σπάνια έτυχε να μην βάλω σωστά τα άγκιστρα, και έτσι άργησα να το βρω).

Το άλλο λάθος ήταν στην τροποποίηση που έκανα για την γρήγορη αναζήτηση εντολών, έβαλα μια εντολή να καλεί κατά λάθος μια παρόμοια, με συνέπεια η εντολή ΑΝΑΖΗΤΗΣΗ για τις βάσεις δεδομένων να μην δούλευε! Αυτό έγινε στις τελευταίες αναθεωρήσεις, οπότε βρέθηκε...μετά από έλεγχο με δοκιμές πολλών προγραμμάτων, που χρησιμοποιώ για έλεγχο.

Προς το παρόν ο κώδικας είναι οκ.


Για τους jagged πίνακες, η Μ2000 μπορεί να περάσει με ισχνή αναφορά ένα στοιχείο πίνακα, την οποία δίνει η Ισχνή$() ή Weak$() αλλά μόνο σε πίνακες με όνομα. Οι πίνακες εντός του πίνακα Α() δεν έχουν όνομα. Επειδή όμως η ισχνή αναφορά είναι αλφαριθμητικό με το πραγματικό όνομα του πίνακα (*) μπορούμε να προσθέσουμε το δείκτη για τον δεύτερο πίνακα, εδώ το "(0)".

Dim A(10)=100
L=Lambda->{ Dim A(number) : =A()}
Module testme {
      read pointer$
      pointer$.++
      Print Eval(pointer$)
}
A(3)=L(20)
A(3)(2)=10
\\ this no work yet
\\  pointer$=weak$(A(3)(2))
pointer$=weak$(A(3))+"(2)"
Print A(3)(2) '10
testme pointer$
Print A(3)(2) '11




*(σαν να είναι γενική μεταβλητή και για το λόγο αυτό λέγεται δείκτης, δουλεύει παντού αρκεί να υπάρχει αυτό που δείχνει, και για το λόγο αυτό λέγεται ισχνή αναφορά, ο έλεγχος γίνεται μια φορά στην αρχή αλλά η σύνδεση γίνεται στιγμιαία και μπορεί να αποτύχει, αν στο μεταξύ διατηρούμε την αναφορά κάπου και έχει στο μεταξύ σβήσει, έχει χαθεί δηλαδή, το αναφερόμενο).

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.