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

时间:2013-03-29 20:57:25

标签: emacs org-mode org-babel

我的巴别图书馆中有很多Org Babel代码块,我经常按顺序调用。

是否可以制作一个按顺序调用这些其他代码块的Org Babel代码块?

3 个答案:

答案 0 :(得分:4)

是的,我有几个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()

如果组织文件中的代码与您要生成的顺序不同,您可以使用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()

答案 1 :(得分:4)

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

#+name: clean
#+begin_src ...
...
#+end_src

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

答案 2 :(得分:-1)

我是新来的,不熟悉Org Babel。我几年前用过其他语言。在重复序列的情况下,您只需将序列编写为函数,并在需要时调用它。让编译器处理繁重的东西。我希望这会有所帮助。