5.2.4. Semántica
El uso de Boolean dependencies
no cambia la semántica de las relaciones regulares.
Si se utiliza Boolean dependencies
, al comprobar una coincidencia se comprueban todos los nombres y el valor booleano de que haya una coincidencia se agrega sobre los operadores booleanos.
Para todas las dependencias, a excepción de Conflicts:
, el resultado debe ser True
para no impedir la instalación. Para Conflicts:
, el resultado debe ser False
para no impedir la instalación.
Provides
no son relaciones y no pueden contener expresiones booleanas.
5.2.4.1. Comprender la salida del operador if
El operador if
también devuelve un valor booleano, que suele acercarse a lo que se entiende intuitivamente. Sin embargo, los siguientes ejemplos muestran que en algunos casos la comprensión intuitiva de if
puede ser engañosa.
Ejemplo 5.3. Salidas erróneas del operador if
Esta sentencia es verdadera si pkgB no está instalado. Sin embargo, si esta declaración se utiliza cuando el resultado por defecto es falso, las cosas se complican:
Requiere: (pkgA si pkgB)
Esta declaración es un conflicto a menos que pkgB esté instalado y pkgA no:
Conflictos: (pkgA si pkgB)
Así que es mejor que uses:
Conflictos: (pkgA y pkgB)
Lo mismo ocurre si el operador if
está anidado en términos de or
:
Requiere: ((pkgA si pkgB) o pkgC o pkg)
Esto también hace que el término completo sea verdadero, porque el término if
es verdadero si pkgB no está instalado. Si pkgA sólo ayuda si pkgB está instalado, utilice and
en su lugar:
Requiere: ((pkgA y pkgB) o pkgC o pkg)