Zmienna Variant jako operator

0

W Artykule na 4p przeczytałem:

Zmienne wariantowe mogą być argumentami wyrażeń: +, -, =, *, /, div, mod, and, or, xor i inne. Jednak ich użycie może doprowadzić do zaskakujących rezultatów

Co oznacza to znaczy zaskakujacych rezultatow? I Jak to wyegzekwowac w praktyce, dwa przykłady:

Przyklad 1

var
a,b,c,d : Variant;

a := 1;
b := '+';
c := 5;

// ? jak wyegzekwowac dodawanie (lub inne dzialanie zdefiniowane w b)
d := a b c; 

Przyklad 2
;
var
a,b,c,d : Variant;

a := 'Mariola';
b := '=';
c := 'Mariola';

// ? jak wyegzekwowac operator rowna sie
if (a b c) then ;



// ps. do administracji, nie weim czy znany fakt, ale po aktualizacji 4p strona nie działa pod FF.
0

Źle zrozumiałeś.

d := a b c;

to tak nie działa. w tekście chodzi raczej o to, że można stosować operatory wobec wariantów:

var a,b,c:variant;
c:=a+b;

Co oznacza to znaczy zaskakujacych rezultatow?
Może się okazać, że wariant jest w rzeczywistości innego „typu”, niż się nam wydaje. Inne „zaskakujące rezultaty” nie przychodzą mi na myśl.

0

Dzięki tera zrozumiałem

0

A pewnie nie da się przechowywać operatora (np +) w zmiennej? (pomijając przechowywanie operatora jako stringa i sprawdzanie ifem przechowywanej wartości)

0

A pewnie nie da się przechowywać operatora (np +) w zmiennej?
Nie.

(pomijając przechowywanie operatora jako stringa i sprawdzanie ifem przechowywanej wartości)
Po co stringa? Lepiej typ wyliczeniowy:

type TOperator=(dodawanie,odejmowanie,mnozenie,dzielenie);

var op:TOPerator;
...
op:=dodawanie;
case op of
  dodawanie : ;
  odejmowanie : ;
  mnozenie : ;
  dzielenie : ;
end;
0

OleVariant przechowuje swoj typ wiec o pomylce nie powinno byc mowy:

if TVarData(FOleVariant).vPointer // i tak dalej i tak dalej

ps spojrzcie na opcje w Delphi powyzej D10 VarPackCreate;

1 użytkowników online, w tym zalogowanych: 0, gości: 1