Problem polega na tym, że THIS_MLM_NAME
nie jest w rzeczywistości ciągiem Arden. Jeśli przetestujesz THIS_MLM_NAME IS STRING
, otrzymasz false. Aby to naprawić, przekonwertować go na sznurku z THIS_MLM_NAME AS STRING
:
ThisMLMName := SUBSTRING 200 CHARACTERS
STARTING AT ((FIND "::" IN STRING (THIS_MLM_NAME AS String)) + 2)
FROM (THIS_MLM_NAME AS String);
Ponieważ nie ma debugger w realizacji Sunrise intensywnej terapii z dnia Arden, napisałem następujące MLM pomóc pokazać informacje na temat zmiennych (nazwa modułu MOD_VARIABLE_INFO
lub zmianę kod dopasować rzeczywistą nazwę):
// data slot
(Variable, Padding) := ARGUMENT;
Result := "";
IF NOT EXIST Padding THEN
Padding := "";
ENDIF;
CR := (13 FORMATTED WITH "%c") || Padding;
Delimiter := "";
MOD_VARIABLE_INFO := MLM 'MOD_VARIABLE_INFO';
IF Variable IS LIST THEN
Result := Result || "List(" || (COUNT Variable) || ") [" || CR || " ";
FOR Item IN Variable DO
Result := Result || Delimiter;
TempResult := CALL MOD_VARIABLE_INFO WITH Item, Padding || " ";
Result := Result || TempResult;
Delimiter := "," || CR || " ";
ENDDO;
Result := Result || CR || "]";
ELSEIF Variable IS STRING THEN
Result := Result || "String";
ELSEIF Variable IS NUMBER THEN
Result := Result || "Number";
ELSEIF Variable IS BOOLEAN THEN
Result := Result || "Boolean";
ELSEIF Variable IS NET_OBJECT THEN
Result := Result || ".Net Object";
ELSEIF Variable IS NULL THEN
Result := Result || "Null";
ELSEIF Variable IS OBJECT THEN
Result := Result || "Object {" || CR || " ";
FOR Attr IN (EXTRACT ATTRIBUTE NAMES Variable) DO
Result := Result || Delimiter || Attr || ": ";
Item := ATTRIBUTE Attr FROM Variable;
TempResult := CALL MOD_VARIABLE_INFO WITH Item, Padding || " ";
Result := Result || TempResult;
Delimiter := "," || CR || " ";
ENDDO;
Result := Result || CR || "}";
ELSE
Result := Result || "Unknown (" || Variable || ")";
ENDIF;
// logic slot
CONCLUDE True;
// action slot
RETURN Result;
Chociaż MLM zwraca „Nieznany” dla THIS_MLM_NAME
, to przynajmniej pokazuje, że nie ma żadnego z rodzimych typów danych Arden ani nie jest to typ danych .NET.
W Sunrise MLM Editor można zobaczyć, co się dzieje w leżącym poniżej Lispie, sprawdzając składnię MLM, następnie klikając zakładkę "Składnia Sprawdź MLM", wybierając "Definicja funkcji", a następnie patrząc na kod w prawy dolny panel. Wyszukaj THIS_MLM_NAME
, a znajdziesz (SETQ THIS_MLM_NAME 'USERNAME-302364198::MLM_NAME)
. Z tego widać, że zmienna została ustawiona na zwykły cytowany/nieoceniony wyrażenie lisp, a nie ciąg, który wyglądałby tak: (SETQ THIS_MLM_NAME "USERNAME-302364198::MLM_NAME")
.