调用另一个源代码块中定义的函数
Call a function defined in another source block
我正在尝试使用 org-babel 在读写程序中进行简单的单元测试。
我的想法是定义一个函数(的主体),就像这样
#+NAME: square
#+BEGIN_SRC js :var x=0
return x*x;
#+END_SRC
当然,我还需要实际创建一个用于缠结的函数,我可以通过
#+BEGIN_SRC js :noweb tangle :tangle the-script.js
function square(x) {
<<square>>
}
#+END_SRC
然后我会设置一个table的测试值,像这样
#+TBLNAME: squares-test-data
| the square of | is |
|---------------+---------|
| 0 | 0 |
| 1 | 1 |
| 10 | 100 |
| 12 | 144 |
| 4 | 16 |
| 9 | 81 |
| 100 | 10000 |
| 234 | 8273424 |
问题是,我如何使用此数据 运行 从单独的块 测试函数体 ,请记住
- 我不想把测试代码包含在乱七八糟的输出中
- 对于使用字符串的函数,我不希望 table
中引用的字符串
- 我宁愿避免 table 中重复的 "expected" 和 "got" 值——对 pass/fail 进行简单的检查或 X 会很好
基本上,我想做的是这样的:
#+BEGIN_SRC js :var table=squares-test-data
// Import square block here somehow?
return table.map(function(row) {
var input = row[0],
expected = row[1],
got = square(input), // this won't be defined
passed = got == expected;
return [input, expected, passed]
});
#+END_SRC
但是这个块没有 "know about" 另一个块。
有什么想法吗?
这主要只是一个简单的疏忽。
你 可以 "import" 以这种方式在评估之前将块插入其他块:
#+BEGIN_SRC js :noweb eval
<<code-under-test>>
// run some tests
#+END_SRC
我太习惯于使用 :noweb tangle
以至于我没有意识到还有其他选择。 :noweb eval
确保块在评估之前纠结,这就是我在这里想要的。
就是说,我确实发现在大多数情况下,组织表作为 输入源 是行不通的,但我有一个令人满意的替代方案,我已经写过并将 link 发布到这里。
我正在尝试使用 org-babel 在读写程序中进行简单的单元测试。
我的想法是定义一个函数(的主体),就像这样
#+NAME: square
#+BEGIN_SRC js :var x=0
return x*x;
#+END_SRC
当然,我还需要实际创建一个用于缠结的函数,我可以通过
#+BEGIN_SRC js :noweb tangle :tangle the-script.js
function square(x) {
<<square>>
}
#+END_SRC
然后我会设置一个table的测试值,像这样
#+TBLNAME: squares-test-data
| the square of | is |
|---------------+---------|
| 0 | 0 |
| 1 | 1 |
| 10 | 100 |
| 12 | 144 |
| 4 | 16 |
| 9 | 81 |
| 100 | 10000 |
| 234 | 8273424 |
问题是,我如何使用此数据 运行 从单独的块 测试函数体 ,请记住
- 我不想把测试代码包含在乱七八糟的输出中
- 对于使用字符串的函数,我不希望 table 中引用的字符串
- 我宁愿避免 table 中重复的 "expected" 和 "got" 值——对 pass/fail 进行简单的检查或 X 会很好
基本上,我想做的是这样的:
#+BEGIN_SRC js :var table=squares-test-data
// Import square block here somehow?
return table.map(function(row) {
var input = row[0],
expected = row[1],
got = square(input), // this won't be defined
passed = got == expected;
return [input, expected, passed]
});
#+END_SRC
但是这个块没有 "know about" 另一个块。
有什么想法吗?
这主要只是一个简单的疏忽。
你 可以 "import" 以这种方式在评估之前将块插入其他块:
#+BEGIN_SRC js :noweb eval
<<code-under-test>>
// run some tests
#+END_SRC
我太习惯于使用 :noweb tangle
以至于我没有意识到还有其他选择。 :noweb eval
确保块在评估之前纠结,这就是我在这里想要的。
就是说,我确实发现在大多数情况下,组织表作为 输入源 是行不通的,但我有一个令人满意的替代方案,我已经写过并将 link 发布到这里。