是否可以从其他代码块调用Org Babel代码块?



在我的Babel库中有许多我经常顺序调用的Org Babel代码块。

是否有可能使一个组织巴别塔代码块调用这些其他代码块的顺序?

可以。只需使用:var,其中参数是另一个块执行的结果。

#+name: clean
#+begin_src ...
...
#+end_src
#+name: plot
#+begin_src :var data=clean
...
#+end_src

是的,我有几个org-babel文件,在那里我这样做。下面是一种方法:

#+srcname: foo
#+begin_src python :exports code :tangle yes
  def foo():
      print "I'm foo()"
#+end_src
#+name: bar
#+begin_src python :exports code :tangle yes
  def bar():
      foo()
      print "I'm bar()'"
#+end_src
#+srcname: main
#+begin_src python :exports code :tangle yes
  foo()
  bar()
#+end_src

输出的文件如下所示:

def foo():
    print "I'm foo()"
def bar():
    foo()
    print "I'm bar()'"
foo()
bar()

如果org文件中的代码与您想要生成的顺序不同,您可以使用noweb标记以您想要的顺序生成代码文件,如下所示:

#+name: bar
#+begin_src python :noweb-ref bar :tangle no
  def bar():
      foo()
      print "I'm bar()'"
#+end_src
#+srcname: foo
#+begin_src python :noweb-ref foo :tangle no
  def foo():
      print "I'm foo()"
#+end_src

#+begin_src python :noweb tangle :tangle yes
  <<foo>>
  <<bar>>
  foo()
  bar()
#+end_src

缠绕这个的输出是:

def foo():
    print "I'm foo()"
def bar():
    foo()
    print "I'm bar()'"
foo()
bar()

相关内容

最新更新