有没有可能从其他代码块调用Org Babel代码块?

7

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

是否可能创建一个 Org Babel 代码块以按顺序调用这些其他代码块?


https://orgmode.org/manual/Noweb-Reference-Syntax.html - HappyFace
2个回答

6
是的,你可以这样做。只需使用:var,其中参数是另一个块执行的结果。
#+name: clean
#+begin_src ...
...
#+end_src

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

这是答案 - 我想创建一个新的代码块,将我想要评估的所有代码块作为:var参数传递。然后当我调用该新代码块时,所有参数也会被评估。谢谢! - Conor
能否定义一个代码块,使其内容被放在变量中而非执行结果? - unhammer
2
回答自己的问题:可以使用 #+name: ex\n#+begin_example xml 而不是 begin_src,然后稍后可以使用 #+begin_src sh :var f=ex\necho "$f" | xmllint --format -\n#end_src - unhammer

5

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

在非noweb方式中,如果foo是需要参数的函数,我该如何调用带有参数的foo并导出结果? - godblessfq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接