Hola a todos. Estoy viendo la herencia múltiple en Solidity. Encontré este ejemplo dentro de su documentación, pero no es lo suficientemente comprensible para mí.
Alguien puede explicar esta oración con más detalle:
La razón de esto es que C solicita que X anule A (especificando A, X en este orden), pero A mismo solicita anular X, lo cual es una contradicción que no se puede resolver.
Mi pregunta es por qué C solicita a X que anule A, es decir, ¿qué significa exactamente este orden de herencia?
pragma solidity ^0.4.0;
contract X {}
contract A is X {}
contract C is A, X {}
Después de investigar encontré:
Con la herencia múltiple, hay un problema causado por el problema del diamante. Solidity resuelve este problema como Python.
Aquí hay dos enlaces que describen este problema en detalle: https://docs.python.org/2/tutorial/classes.html#instance-objects https://www.python.org/download/releases/2.3/mro/
Entonces, el orden de la herencia es importante para evitar el problema de Diamond. El orden debe ser: desde las clases en el nivel superior de herencia hasta las clases en los niveles inferiores
Se explica mejor en los documentos de solidez sobre herencia múltiple y linealización :
Debe enumerar los contratos de base directos en el orden de "más parecido a la base" a "más derivado". Tenga en cuenta que este orden es el inverso al utilizado en Python.
Otra forma simplificada de explicar esto es que cuando se llama a una función que se define varias veces en diferentes contratos, las bases dadas se buscan de derecha a izquierda (de izquierda a derecha en Python) primero en profundidad, deteniéndose en la primera coincidencia. . Si ya se ha buscado un contrato base, se omite.
ismael
shamisén