2.1全局语法规则
续上期
可选变量与变量的None值
声明变量时如果在变量类型后面加了个“?”,那就表示这个变量可以不用传入值,并且也不会引发报错。WDL中有一个特殊的值None用来表示这是一个未定义的值。None值可以是任何类型变量的赋值,即使是声明可选的变量。如果一个可选变量在声明时传入了默认初始值None,那么就表明这个变量是未定义的。
Intcertainly_five=5#annon-optionaldeclarationInt?maybe_five_and_is=5#adefinedoptionaldeclaration#thefollowingareequivalentundefinedoptionaldeclarationsString?maybe_five_but_is_notString?maybe_five_but_is_not=NoneBooleantest_defined=defined(maybe_five_but_is_not)#EvaluatestofalseBooleantest_defined2=defined(maybe_five_and_is)#EvaluatestotrueBooleantest_is_none=maybe_five_but_is_not==None#EvaluatestotrueBooleantest_not_none=maybe_five_but_is_not!=None#Evaluatestofalse
复合类型变量
如果把StringIntFile...这些变量类型理解为变量的一级结构的话,那么复合类型变量就是具有二级结构的变量。复合类型1:Array[X]Array表示相同类型元素的有序列表,X表示列表中变量的类型。元素的顺序与元素进入该列表的顺序一致,不会改变。如果要在创建Array[X]变量时就对它进行赋值,可以使用与python类似的列表格式进行赋值,即[x1,x2,x3,...]这种形式,并且列表的索引也是从0开始的,可以通过索引对列表中的元素进行访问。如果对空列表进行索引访问的话,则会触发报错。
Array[File]files=["/path/to/file1","/path/to/file2"]Filef=files[0]#evaluatesto"/path/to/file1"Array[Int]empty=[]#thiscausesanerror-tryingtoaccessanon-existentarrayelementInti=empty[0]#会触发报错
我们可以定义一个空Array,也可以用“+”来声明Array至少包含一个元素。下面这个示例定义了一个Array[File],并且要求这个列表至少包含一个元素:
taskalign{input{Array[File]+fastqs}Stringsample_type=iflength(fastqs)==1then"--single-end"else"--paired-end"