Είχα φτιάξει την δυνατότητα να περνάμε με αναφορά σε ρουτίνα μια αριθμητική μεταβλητή τύπου double (κινητής υποδιαστολής μεγάλων αριθμών), αλλά δεν είχα κάνει τις επιμέρους εργασίες για άλλου τύπου όπως αλφαριθμητικών, ακεραίων και πινάκων.
Αυτό λειτουργούσε:
a=lambda->100*number
level1(a)
Sub Level1(item)
Level2(&item)
End Sub
Sub Level2(&item)
Print item(3)
End Sub
όπως και αυτό (η Κατάσταση ή Inventory περνάει πάντα με αναφορά, ακόμα και αν δε το δώσουμε με αναφορά, και αυτό συμβαίνει γιατί και η αντιγραφή κάνει αντιγραφή δείκτη, άρα είναι αναφορά:
Function a {
Dim a(number)=100
=a()
}
inventory alfa= "m1":= lambda->100*number , 100:=lambda->5*number, 200:=a(10)
level1(alfa)
Print alfa(200)(5) \\ 12345
Print alfa(200)(6) \\ 101
Sub Level1(item) ' inventory always passed by reference
Level2(&item)
End Sub
Sub Level2(&item)
Print item("m1")(5)
Print item(100)(5)
item(200)(5)=12345
item(200)(6)++
End Sub
αλλά στις προηγούμενες εκδόσεις δεν γίνονταν τα παρακάτω, γιατί έβρισκε το &item() ότι υπήρχε όνομα item() στο ίδιο τμήμα (οι ρουτίνες δεν έχουν δικό τους όνομα χώρου, όπως τα τμήματα και οι συναρτήσεις, και ότι υπάρχει στο τμήμα είναι "θεατό" ή "εντός σκοπού" για την ρουτίνα. Εδώ είναι μερικά παραδείγματα που τώρα δουλεύουν! Οι λάμδα συναρτήσεις αντιγράφονται σε όλα τα στοιχεία τους (εκτός αν το στοιχείο είναι Κατάσταση ή Inventory, όπου και εδώ θα έχουμε αναφορά)
a$=lambda$->"Hello"+str$(number)
level1(a$)
Sub Level1(item$)
Level2(&item$)
End Sub
Sub Level2(&item$)
Print item$(100)
End Sub
σε άλλο τμήμα:
a$="Hello"
level1(a$)
Sub Level1(item$)
Level2(&item$)
End Sub
Sub Level2(&item$)
Print item$
End Sub
σε άλλο τμήμα:
Dim a(10)=10
level1(a())
Sub Level1(item())
Level2(&item())
End Sub
Sub Level2(&item())
Print item(3)
End Sub
σε άλλο τμήμα:
Dim a%(10)=10
level1(a%())
Sub Level1(item%())
Level2(&item%())
End Sub
Sub Level2(&item%())
Print item%(3)
End Sub
σε άλλο τμήμα:
a%=10
level1(a%)
Sub Level1(item%)
Level2(&item%)
End Sub
Sub Level2(&item%)
Print item%
End Sub
Σε ελληνικά (στα ονόματα ρουτινών τα μικρά-μεγάλα-τονισμένα είναι διαφορετικά, δεν ισχύει αυτό στα τμήματα και στις συναρτήσεις και στις μεταβλητές):
α$="Γεια χαρά"
Επίπεδο1(α$)
Ρουτίνα Επίπεδο1(κάτι$)
Επίπεδο2(&κάτι$)
Τέλος Ρουτίνας
Ρουτίνα Επίπεδο2(&κάτι$)
Print κάτι$
Τέλος Ρουτίνας
Αυτό λειτουργούσε:
a=lambda->100*number
level1(a)
Sub Level1(item)
Level2(&item)
End Sub
Sub Level2(&item)
Print item(3)
End Sub
όπως και αυτό (η Κατάσταση ή Inventory περνάει πάντα με αναφορά, ακόμα και αν δε το δώσουμε με αναφορά, και αυτό συμβαίνει γιατί και η αντιγραφή κάνει αντιγραφή δείκτη, άρα είναι αναφορά:
Function a {
Dim a(number)=100
=a()
}
inventory alfa= "m1":= lambda->100*number , 100:=lambda->5*number, 200:=a(10)
level1(alfa)
Print alfa(200)(5) \\ 12345
Print alfa(200)(6) \\ 101
Sub Level1(item) ' inventory always passed by reference
Level2(&item)
End Sub
Sub Level2(&item)
Print item("m1")(5)
Print item(100)(5)
item(200)(5)=12345
item(200)(6)++
End Sub
αλλά στις προηγούμενες εκδόσεις δεν γίνονταν τα παρακάτω, γιατί έβρισκε το &item() ότι υπήρχε όνομα item() στο ίδιο τμήμα (οι ρουτίνες δεν έχουν δικό τους όνομα χώρου, όπως τα τμήματα και οι συναρτήσεις, και ότι υπάρχει στο τμήμα είναι "θεατό" ή "εντός σκοπού" για την ρουτίνα. Εδώ είναι μερικά παραδείγματα που τώρα δουλεύουν! Οι λάμδα συναρτήσεις αντιγράφονται σε όλα τα στοιχεία τους (εκτός αν το στοιχείο είναι Κατάσταση ή Inventory, όπου και εδώ θα έχουμε αναφορά)
a$=lambda$->"Hello"+str$(number)
level1(a$)
Sub Level1(item$)
Level2(&item$)
End Sub
Sub Level2(&item$)
Print item$(100)
End Sub
σε άλλο τμήμα:
a$="Hello"
level1(a$)
Sub Level1(item$)
Level2(&item$)
End Sub
Sub Level2(&item$)
Print item$
End Sub
σε άλλο τμήμα:
Dim a(10)=10
level1(a())
Sub Level1(item())
Level2(&item())
End Sub
Sub Level2(&item())
Print item(3)
End Sub
σε άλλο τμήμα:
Dim a%(10)=10
level1(a%())
Sub Level1(item%())
Level2(&item%())
End Sub
Sub Level2(&item%())
Print item%(3)
End Sub
σε άλλο τμήμα:
a%=10
level1(a%)
Sub Level1(item%)
Level2(&item%)
End Sub
Sub Level2(&item%)
Print item%
End Sub
Σε ελληνικά (στα ονόματα ρουτινών τα μικρά-μεγάλα-τονισμένα είναι διαφορετικά, δεν ισχύει αυτό στα τμήματα και στις συναρτήσεις και στις μεταβλητές):
α$="Γεια χαρά"
Επίπεδο1(α$)
Ρουτίνα Επίπεδο1(κάτι$)
Επίπεδο2(&κάτι$)
Τέλος Ρουτίνας
Ρουτίνα Επίπεδο2(&κάτι$)
Print κάτι$
Τέλος Ρουτίνας
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.