1

我链接到能够做这样的事情:

workflow XXX {
   take:
       a
       b default ""
   main:
       if (b == "") {
          println "a is ${a} and b is unset"
       } else {
          println "a is ${a} and b is ${b}"
       }

}

但是代码无法编译......最接近的有效下一个流程是什么?

4

1 回答 1

1

take工作流可以使用关键字声明一个或多个输入通道。但是,目前没有办法修改声明中的通道。但这通常不是问题,因为您当然可以在工作流的上游或下游转换通道发出的值。

我认为如果您的工作流程有时需要额外的输入通道,那么只需让该工作流程定义该额外的输入通道。然后,当您调用工作流时,您可以以通常的方式为通道定义默认值 - 即使用ifEmpty 运算符。例如:

nextflow.enable.dsl=2

workflow test {
   
   take:
     input_values
     input_files
   
   main:
     input_files.view()
}

workflow {

   foobarbaz = Channel.of( 'foo', 'bar', 'baz' )
   text_files = Channel.fromPath( '/path/*.txt' ).ifEmpty( file('./default.txt') )

   test( foobarbaz, text_files )
}

或者,定义单个输入通道并使用参数提供默认值:

workflow test {
     
   take:
     input_values

   main:

     if( params.text_file ) {
     
       do_something( params.text_file )

     } else {

       do_something_else()
     }
}
于 2021-08-19T12:43:08.587 回答