[Gambas-user] Re: casting or changing datatype.

Rob Kudla sourceforge-raindog2 at ...94...
Sat Jan 14 20:46:06 CET 2006


On Sat January 14 2006 11:37, johnf wrote:
> have been a function.  My only excuse is I program in Foxpro
> and there is not real difference between a function and a
> method both can return a variable.

In Perl, C and most other languages there's no difference between 
the two either.... it's really a BASIC thing.  I do that all the 
time myself and have to correct it to make it compile.

> All I'm attempting to do is write a class that can accept a
> string which will create a "result" datatype with a name
> matching the string.  

I think I remember doing what you're trying to do, way back in my 
dBase IV days.  (Foxpro's language was based on dBase.)

The difference is, symbols (meaning names of variables, etc.) are 
discarded in Gambas when you compile the code, just like in Java 
and C, so you can't create a variable with a specific name at 
runtime.  What you can do, however, is this:

' outside of any subs...
PUBLIC MyResults as Collection

' in your Sub Main or Form_Load or whatever...
MyResults = NEW Collection

' and then you can write this:
DIM s as String
s = "anyname"
MyResults[s] = db.Execute("select * from arcust")
' then you can go like this:
print MyResults["anyname"]["Address1"]
' or
print MyResults[s]["City"]
' or even
dim r as Result
r = MyResults[s]
print r["Zip"]
' etc.

So, to rewrite that function from your original question,

public function myResult(thestr as String) as Result

return MyResults[thestr]

end

But it'd probably be easier to just refer to MyResults[thestr] 
without writing that function.

Let me know if this is what you had in mind.

> Actually the sql statement is very different but I want it to
> simple. The "realbasic" example is called "casting" I believe.

I have about 5 minutes of experience with RealBasic, but 
"casting" in other languages means "forcing the 
compiler/interpreter to treat a variable as a different type 
than it was created as."  For example, suppose you have an 
integer and you want your C compiler to treat it as an unsigned 
long.... you'd go like this:

int i = 1;
printf("Look, it's an unsigned long: %d", (ulong) i);

While used frequently, casting is pretty dangerous.  If for 
example I had written 

printf("Look, it's a string: %s", (char *) i);

forcing i to be a string pointer, the program would have crashed 
and dumped core at runtime, as it would have been looking for 
the string to start at memory location 0x00000001.

Anyway, Gambas (like VB and most other BASIC variants, and even 
most other high level languages like php and python) has no such 
concept as casting.... types are automatically converted when 
possible, and there are conversion functions like Val() and 
CStr() when it's not.  And there's a type called Variant which 
can basically store anything.  The keys and values in a 
Collection are always variants, which is how we can put your 
Result into one.

> I'm a newbie to gambas and basic in general.  Which means I'm
> trying to use old thinking with a new langauge.  So I'm very
> open to suggestions on how to create a framework.  Actually I
> open to anything with respect to Gambas.

What I've described is pretty similar to how the IDE, for 
example, handles the controls we create at runtime.  The IDE is 
probably the best example of a Gambas framework there is, right 
now.

Rob




More information about the User mailing list