在Rmarkdown中执行Perl 6代码

Sum*_*nal 11 perl r perl6 knitr r-markdown

我想写一些关于Perl 6的教程.对此我相信Rmarkdown会有很大的帮助.

所以我试图Perl 6在Rmarkdown文档中执行代码.

我的Perl 6可执行文件在C:\rakudo\bin.所以我的.Rmd文件带有示例代码来完成此操作如下:

---
title: "Example"
output: html_document
---

```{r, engine='perl6', engine.path='C:\\rakudo\\bin'}
my $s= "knitr is really good";
say $s;
```
Run Code Online (Sandbox Code Playgroud)

然而,在Rstudio中编织上述文档显示以下没有Perl 6输出. 在此输入图像描述

我失踪的任何帮助?

小智 11

不是我的专业领域,但在博客帮助下,我设法让它产生输出.

首先,查看RStudio的R Markdown选项卡.它会向您显示一条警告,说明您的版本未呈现任何内容的原因:

Warning message:
In get_engine(options$engine) :
  Unknown language engine 'perl6' (must be registered via knit_engines$set()).
Run Code Online (Sandbox Code Playgroud)

因此,考虑到这一点,我们可以查找如何注册引擎并执行此操作:

```{r setup, echo=FALSE}
library(knitr)
eng_perl6 <- function(options) {
  # create a temporary file
  f <- basename(tempfile("perl6", '.', paste('.', "perl6", sep = '')))
  on.exit(unlink(f)) # cleanup temp file on function exit
  writeLines(options$code, f)
  out <- ''

  # if eval != FALSE compile/run the code, preserving output
  if (options$eval) {
    out <- system(sprintf('perl6 %s', paste(f, options$engine.opts)), intern=TRUE)
  }

  # spit back stuff to the user
  engine_output(options, options$code, out)
}

knitr::knit_engines$set(perl6=eng_perl6)
```

```{r, engine='perl6'}
my $s= "knitr is really good";
say $s;
```
Run Code Online (Sandbox Code Playgroud)

引擎注册了一个函数,该函数首先保存代码以运行到临时文件,然后执行Rakudo编译器,要求它编译该文件.

收集所需的输出后,该函数将删除临时文件并为我们提供渲染输出.