变量
-
WDL的变量不同于一般语言变量,应该叫“占位符”——一旦赋值之后,不能在后续运行中变化
-
“先声明,再使用”,变量类型有严格规定,主要体现在String和File
-
变量可出现在workflow和task,也可以在runtime属性中,使用变量,提高流程灵活性
基础数据类型
File
File是指Linux中文件路径(相对/绝对路径),要注意command中实际运行情况。
String
应用广泛。
Int/Float
Boolean
True/False两种。注意赋值时,不要加引号(否则当成字符串)。
"myworkflow.bvalue": True
复合数据类型
数组 Array
同类型的顺序数据定义方式。与一般语言不同,不同基础数据类型不能放在一个数组中。
Array[File] my_file_array
对象 Object
一组任意类型的数据组合
Object a = {"name":"zhangsan","age":20, "gender":"Male"...}
定义Object时,WDL本身对其中结构没有明确限制,因此在运行时要对代码本身结构了解。
在WDL v1.1,Object要去掉,以Structure替代(事先定义变量)
键值对 Map
与Object类似。不同之处:Object的key不能变化,而Map的key是一个变量
Map[Int, Int] = {1:10, 2:11}
Map[String, Int] = {"a":1, "b":2}
复合型数据类型嵌套
相互嵌套,形成更复杂的数据类型
Array[Object] a
Array[Map] b
变量约束
一般变量:一旦定义,在输入必须存在
可选变量:在输入时,可不存在
非空数组:输入定义时,必须不为空(只对Array起作用)
String prefix #一般变量
String? somthing #可选变量
Array[File]+my_inputs #非空数组(元素数目>=1)
变量使用
占位符的使用:${file}或~{file}
${file}可能会与shell中变量冲突(一般也遇不到)
sep: ${sep=", " array_value}
true and false: ${true="--yes" false="--no" boolean_value}
default: ${default="foo" optional_value}
sep模式
sep模式可实现占位符之间的连接,一般应用于Array变量
task task1{
Array[File] myfiles
command{
Foo ${sep="-I " myfiles} -o ...
}
}
true-false模式
只作用于Boolean
task task2{
Boolean flag
command{
Foo ${true='-removeduplications ' false="" flag} -o ...
}
}
默认值default
是否设初始值
task task3{
String? prefix
command{
Foo -name ${default='my_demo' flag} -o ...
}
}
变量作用范围
作用范围是指同名变量在何种情况下会被解析器或编译器认为是相同的。
WDL的变量本质上是占位符,因此在workflow中的变量只在workflow中使用。如果不通过call task传递,不会直接作用于task中。
https://www.bilibili.com/video/BV1V3411t7np/?spm_id_from=333.788.recommend_more_video.-1
网友评论