Ankündigung

Einklappen
Keine Ankündigung bisher.

Item: eval und Szenen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Item: eval und Szenen

    Hallo,

    mal eine Verständnisfrage: Ich habe ein Item mit einem eval versehen. Das Item ist vom Typ "bool". Das eval hört über eval_trigger an einem Item das vom Typ "num" ist. Der eval-Ausdruck funktioniert damit in fast allen Fällen problemlos.

    Jetzt habe ich auch eine Szene und in dieser möchte ich das Item setzen. Das klappt insoweit, dass der Wert tatsächlich beim Item im eval ankommt. Allerdings ist der Wert vom Typ "str" und damit kommt der eval-Ausdruck nicht zurecht.

    Muss man nun tatsächlich den eval-Ausdruck robust gegen falsche Typen formulieren? Aus Szenen kommt wohl immer nur "str".

    Oder wäre es eine Idee bei Szenen den Typ des Wertes beim Auslesen aus der Szene-Datei auf den Item-Typ zu konvertieren?

    Softwarestand ist "development".

    Grüße
    Mike

    #2
    Hi Mike,

    Zitat von mike Beitrag anzeigen
    Muss man nun tatsächlich den eval-Ausdruck robust gegen falsche Typen formulieren? Aus Szenen kommt wohl immer nur "str".
    ja, muss man. Bei eval kann man viel rein schreiben. Ein Bool-Item kommt auch mit str aus der folgende Liste klar: ['0', 'false', 'no', 'off', '1', 'true', 'yes', 'on']

    Bis bald

    Marcus

    Kommentar


      #3
      Hi Marcus,

      ist soweit klar. Gut wäre dann noch eine "Konvertiere so wie das Item konvertieren würde"-Methode: self.cast(value).

      Das Beispiel aus dem Wiki (ohne Typkonvertierung):
      Code:
      # items/level.conf
      [level]
          type = num
          eval = value * 2 - 1  # if you call sh.level(3) sh.level will be evaluated and set to 5
      könnte dann so formuliert werden:

      Code:
      # items/level.conf
      [level]
          type = num
          eval = self.cast(value) * 2 - 1  # if you call sh.level('3') sh.level will be evaluated and set to 5
      Das wäre dann auch mit Szenen verwendbar.


      Noch ein anderes Problemchen: Im Log sehe ich, dass bei gesetzter eval-Zeile und eval_trigger unmittelbar nach dem Start das eval ausgeführt wird. Ich habe aber keinen Hinweis gefunden, wie man dieses Feature benutzt oder wie es entstanden ist.

      Ich würde es gerne verwenden, um beim Start den Wert des Items aus dem Wert anderer Items zu bestimmen. (OK, das ist eigentlich nicht wirklich möglich, da die Reihenfolge in der Items einen "echten" Wert bekommen nicht definiert ist.)

      Nach Lesen des Kodes habe ich herausgefunden, dass die Variable 'caller' in dem Augenblick den Wert 'Eval' enthält, da eval() komplett ohne Argumente aufgerufen wird. Das verwirrt, da im Log der Trigger zu sehen ist, wo der Caller als " - by: Init" ausgegeben wird.
      Wäre es möglich hier als Caller 'Init' durchzureichen?

      Ich habe das mal so geändert und einen Patch gegen develop angehangen. Dann sieht man schneller was ich meine ...

      Grüße
      Mike
      Angehängte Dateien

      Kommentar


        #4
        Hi Mike,

        ich habe das übernommen.

        Danke

        Marcus

        Kommentar

        Lädt...
        X