tag featured collection all_products flex programming-languages arraycollection

flex - featured - shopify liquid assign



¿Por qué el método Contain de Flex''s ArrayCollection mira la referencia de memoria? (4)

Al usar .contains() en un ArrayCollection en Flex, siempre mirará la referencia de memoria. No parece mirar un método .toString() o un método .toString() o cualquier cosa que se pueda sobrepasar. En su lugar, necesito recorrer todo el ArrayCollection cada vez y verificar cada ítem individual hasta que encuentre lo que estoy buscando.

¿Alguien sabe por qué Flex / ActionScript se hizo de esta manera? ¿Por qué no ofrecen una forma de que las personas usen el método contains() la forma que desean?


¿No podría extender ArrayCollection y anular el método contains ()? Alternativamente, puede pegar la fuente de ArrayCollection en un paquete "mx / collections" en su proyecto y modificar la fuente; esta "técnica de parche de monos" anulará el comportamiento en todo su proyecto. Sin embargo, sería extremadamente cauteloso al cambiar ArrayCollection de esa manera: dado que se usa en todas las API de Flex, existe una buena posibilidad de que comience a romper otros componentes en el marco.


El método contains () busca por referencia, correcto (creo incluso para primitivas), así que si estás tratando de encontrar una cadena o un int en un ArrayCollection, tendrás que buscar tú mismo, por alguna variación de looping o buscando No creo que ninguno de nosotros pueda decir por qué no hay, por ejemplo, un parámetro opcional en ese método que indique si buscar por ref o por val; así va, como dicen.

Pero definitivamente te advierto que no uses el código de framework, eso es solo pedir problemas. :)


Bueno, parece que ArrayCollection no mira directamente a la memoria, sino solo como último recurso. Intentará encontrar una identificación única (UID) para el objeto. Si el UID no existe, creará uno utilizando el UIDUtil.as.

Puede evitar todo este UID predeterminado haciendo que su objeto implemente la interfaz IUID y proporcione su propio UID para el objeto. ArrayCollection mirará el UID que le proporcione.


Sugeriría un simple:

in_array($haystack, $arrayCollection->toArray());