有没有办法为可选输入通道提供默认值?

Is there a way to provide a default value for an optional input channel?

我 link 能够做这样的事情:

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}"
       }

}

但是代码无法编译...最接近的有效 nextflow 是什么?

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

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

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()
     }
}