2013-03-29 4 views
3

У меня есть несколько блоков кода Орд Бабеля в моей Вавилонской библиотеке, которые я вызываю последовательно довольно часто.Можно ли вызвать кодовые блоки Org Babel из других кодовых блоков?

Возможно ли сделать блок кода Org Babel, который вызывает эти другие кодовые блоки?

ответ

4

Да, вы можете. Просто используйте: var, где параметр является результатом выполнения другого блока.

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

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

Это ответ - я хочу создать новый блок кода, который принимает все блоки кода, которые я хочу оценить как: var arguments. Затем, когда я вызываю этот новый блок кода, все аргументы также оцениваются. Благодаря! – Conor

+0

Да, вы можете объединить столько блоков, сколько хотите, делая это. – fniessen

-1

Я новичок здесь и не знаком с Org Babel. Я использовал другие языки много лет назад. В ситуации с повторяющимися последовательностями вы просто записываете последовательность как функцию и вызываете ее всякий раз, когда вам это нужно. Пусть компилятор справится с тяжелым материалом. Надеюсь, это поможет.

+7

Я собираюсь ответить на это, потому что вы новичок и без объяснений опущены. Ваш ответ не помог. OP по существу спрашивал, как функции реализованы в Org Babel, поэтому советуя ему использовать функцию, говорит ему использовать то, что он, очевидно, не знает, как использовать. Кроме того, признавая, что вы не знаете, о чем говорите в начале своего ответа, это своего рода приглашение на downvoting. Проведите некоторое время, используя наш сайт. Здесь много отличной информации и много полезных людей, и мы все хотели бы, чтобы вы были одним из них. –

3

Да, у меня есть несколько файлов 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() 
+0

В случае non-noweb, если foo является аргументом необходимости функции, как я могу вызвать foo с аргументом и экспортировать результат? – godblessfq