[新手] 如何在 org-mode 下把一段文本传给其他的代码块

在 Org-mode 里面有一个叫做 Meta-Programming 的介绍: 参考的是这个链接.

但是如果我想要实现这样的功能: 把一段文本 (比如说是 #+begin_src text 的东西作为输入传给我已经写好的代码里面. )

#+name: english-1-fstn-raw
#+begin_src text
  Name ENGLISH-1:
    Initial 1
    Final 9
    From 1 to 3 by NP
    From 1 to 2 by DET
    From 2 to 3 by N
  ...
#+end_src

#+name: ruby-fstn-dot-parser
#+begin_src ruby
  nodes = /(Initial|Final)\s+(\w+)/
  arcs = /From\s+(\w+)\sto\s+(\w+)\s+by\s+(\w+|#)/

  res = "  rankdir = LR;\n" + \
	"  node [shape = point]; qi qa;\n" + \
	"  node [shape = circle];\n"

  raw.each_line do |line|
    if line.match(nodes)
      m = Regexp.last_match
      type, node_name = m[1], m[2]

      if type == "Initial"
	res << "  qi -> #{node_name};\n"
      else # type == "Final"
	res << "  #{node_name} -> qa;\n"
      end
    elsif line.match(arcs)
      m = Regexp.last_match
      from, to, l = m[1], m[2], m[3]
    
      if m[3] == '#'
	label = ";\n"
      else
	label = " [label = \"#{m[3]}\"];\n"
      end
      res << "  #{from} -> #{to}#{label}"
    end
  end

  return res # from `puts res` changed to `return res`
#+end_src

#+header: :var in=ruby-fstn-dot-parser(raw = english-1-fstn-raw)
#+begin_src dot
  digraph finite_state_machine {
    $in
  }
#+end_src

那么在运行的时候, 则会提示没有对应 text 的运行函数 (嗯, 很合理的感觉); 那么如果我把 #+begin_src text 改成 #+begin_verbatim; 则会输出 nil.

那么请问有没有什么方法可以将一段文本作为文本直接传入函数调用呢?

:sweat_drops:

啊哈哈… 突然发现出错的原因是因为 org-babel 将 ruby 代码貌似是包在一个 def 函数里面调用的. (代码位置) 所以不能用 puts 这样的函数来输出.

把原来的代码改掉之后就可以了 (从 puts res 改成 return res)

虽然我不懂 ruby,但你代码不贴全,谁也不知道你要干什么。

已修改原始的代码. 多谢指出.