Toon posts:

[Visual Basic] call by value in een functie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Stel ik heb een collectie mCol[] met daarin een aantal objecten.
code:
1
2
3
4
5
6
dim nextObject as object

set nextObject = findObject(2)
debug.print nextObject.name 'print Jan naar het scherm
nextObject.name = "piet"
debug.print mCol[2].name 'print piet naar het scherm


Nu wil ik dat in nextObject.name de naam piet is, maar in mCol[2] (het object wat de functie findObject teruggeeft) de naam nog steeds de originele is, Jan.

  • bigben04
  • Registratie: December 2001
  • Laatst online: 07-05 10:38
Zoekopdracht

2e hit

En de informatieve tekst:
Call-by-Value

In Call-by-Value, a copy of the argument’s value is passed, thus, the called procedure do not manipulate the caller’s data because it is the copy that it received. There is one known disadvantage: if we have numerous arguments with large sizes, we incur an overhead of copying large amounts of data. This may cause our application to run slow.
You call a procedure by Call-by-Value through the Call statement as we have discussed, but you should tell the procedures to be called to receive the just value of the passed arguments:

* Precede the corresponding parameter variable in the procedure definition with keyword ByVal

e.g. Function X (ByVal x as Boolean) As Integer

* Enclose the argument in parentheses ( )

e.g. Function X ( (x) as Boolean) As Integer

[ Voor 40% gewijzigd door bigben04 op 26-05-2004 12:58 . Reden: Stukje geknipt i.v.m. nutteloosheid ]


Verwijderd

Topicstarter
bigben, ik heb inderdaad eerst gezocht, maar waar je dan op uitkomt is het doorgeven van parameter(s) bij een functie als reference of value.

Function Sample (ByRef x As Boolean) As Object

hier wordt dus x als reference meegegeven.

Wat ik juist wil, is dat de return van de functie Sample niet als reference teruggeven wordt. Dus een kopie van het object.

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 21:51

RayNbow

Kirika <3

Ik heb dit nog niet getest maar kun je niet zoiets doen?

Visual Basic 6:
1
2
3
4
5
6
7
8
Function Sample(ByRef x As Boolean) As Object
    ' code
    Sample = Clone(objectdatjewiltretourneren)
End Function

Function Clone(ByVal obj As Object) As Object
    Set Clone = obj
End Function


Edit: bah... dat ByVal werkt niet...

[ Voor 9% gewijzigd door RayNbow op 26-05-2004 12:39 ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • bigben04
  • Registratie: December 2001
  • Laatst online: 07-05 10:38
Verwijderd schreef op 26 mei 2004 @ 12:22:
bigben, ik heb inderdaad eerst gezocht, maar waar je dan op uitkomt is het doorgeven van parameter(s) bij een functie als reference of value.

Function Sample (ByRef x As Boolean) As Object

hier wordt dus x als reference meegegeven.

Wat ik juist wil, is dat de return van de functie Sample niet als reference teruggeven wordt. Dus een kopie van het object.
Aha, foutje mijnerzijds.
Dit is wel een interessant verhaal, vooral het eerste stuk beschrijft precies je probleem (en hoe lastig het op te lossen is :) )

[ Voor 34% gewijzigd door bigben04 op 26-05-2004 13:09 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Je kunt in VB, net als in Java niet makkelijk een kopie maken van een object, zonder een soort CopyTo( ... ) functie te schrijven. ( Voor elk object die je wil kopieren )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1