小编jjm*_*elo的帖子

在 GitHub 操作中的新作业中使用先前作业的输出

出于(主要)教学原因,我正在尝试在 GitHub 操作中运行此工作流程:

name: "We  Perl"
on:
  issues:
    types: [opened, edited, milestoned]

jobs:
  seasonal_greetings:
    runs-on: windows-latest
    steps:
      - name: Maybe greet
        id: maybe-greet
        env:
          HEY: "Hey you!"
          GREETING: "Merry Xmas to you too!"
          BODY: ${{ github.event.issue.body }}
        run: |
          $output=(perl -e 'print ($ENV{BODY} =~ /Merry/)?$ENV{GREETING}:$ENV{HEY};')
          Write-Output "::set-output name=GREET::$output"
  produce_comment:
    name: Respond to issue
    runs-on: ubuntu-latest
    steps:
      - name: Dump job context
        env:
          JOB_CONTEXT: ${{ jobs.maybe-greet.steps.id }}
        run: echo "$JOB_CONTEXT"
Run Code Online (Sandbox Code Playgroud)

我需要两个不同的作业,因为它们使用不同的上下文(操作系统),但是我需要将第一个作业中的步骤输出到第二个作业。我正在尝试使用此处jobs找到的几种上下文组合,但似乎没有任何方法可以做到这一点。显然,只是一个 YAML 变量的名称,它实际上没有上下文,上下文只包含成功或失败。任何的想法?jobsjob

perl github-actions

44
推荐指数
4
解决办法
2万
查看次数

为什么整数除法在许多脚本语言中向下舍入?

在我测试的语言中,- (x div y )不等于-x div y; 我已经//在Python中,/在Ruby中,div在Perl 6中进行了测试; C有类似的行为.

这种行为通常是根据规范,因为div通常被定义为舍入向下分工的结果,但它不从的观点算术点做出很大的意义,因为它使div行为以不同的方式取决于标志,它引起混乱,如这篇文章如何在Python中完成.

这个设计决策背后是否有一些特定的理由,或者只是div从头开始定义?显然Guido van Rossum在博客文章中使用了一致性论证,解释了它是如何在Python中完成的,但如果你选择整理,你也可以有一致性.

(受到PMurias在#perl6 IRC频道中的这个问题的启发)

ruby python integer-division perl6 raku

43
推荐指数
5
解决办法
4663
查看次数

使用诗歌运行 pytest 包

我对诗歌很陌生,想用 pytest 来设置它。我在以下设置中有一个包 mylib

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dist\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mylib-0.0.1-py3-none-any.whl\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mylib-0.0.1.tar.gz\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 poetry.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mylib\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 functions.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 utils.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_functions.py\n
Run Code Online (Sandbox Code Playgroud)\n

在 test_functions 我有

\n
import mylib\n
Run Code Online (Sandbox Code Playgroud)\n

然而,当我跑步时

\n
poetry run pytest\n
Run Code Online (Sandbox Code Playgroud)\n

它抱怨mylib没有被包括在内。我可以跑

\n
pip install dist/mylib-0.0.1-py3-none-any.whl\n
Run Code Online (Sandbox Code Playgroud)\n

但这会使我的 python 环境与 mylib 变得混乱。我也想将该环境用于其他包。

\n

我的问题是:使用诗歌和 pytest 的正确方法是什么?

\n

我的底层 python 环境是干净的 pyenv python 3.8。使用 pyproject.toml 我为 mylib 创建一个基于项目的虚拟环境。

\n

python pytest python-poetry

35
推荐指数
3
解决办法
7万
查看次数

你可以在git commit期间更改文件内容吗?

在GitHub的开放小说中保留的一个东西是我想自动设置第一行的单词列表,这是字典中单词的数量.我的第一个选择是编写一个预提交钩子,它读取文件,计算单词,重写第一行并再次写回.这是代码

PRE_COMMIT {
  my ($git) = @_;
  my $branch =  $git->command(qw/rev-parse --abbrev-ref HEAD/);
  say "Pre-commit hook in $branch";
  if ( $branch =~ /master/ ) {
     my $changed = $git->command(qw/show --name-status/);
     my @changed_files = ($changed =~ /\s\w\s+(\S+)/g);
     if ( $words ~~ @changed_files ) {
       my @words_content = read_file( $words );
       say "I have $#words_content words";
       $words_content[0] = "$#words_content\n";
       write_file( $words, @words_content );
     }
   }
};
Run Code Online (Sandbox Code Playgroud)

但是,由于该文件已经暂存,我收到此错误

错误:checkout将覆盖对以下文件的本地更改:text/words.dic请在提交更改或存储更改之前切换分支.中止

可能最好将它作为一个后提交钩子并将其更改为下一次提交?或者做一些完全不同的事情?一般问题是:如果您想在提交期间处理和更改文件的内容,那么正确的方法是什么?

git hook commit

24
推荐指数
2
解决办法
2万
查看次数

如何使用Perl 6中的Perl 5模块?

是从Rakudo Perl 6使用CPAN的Perl 5模块的方法吗?

例如,如何在Perl 6中使用尚未移植的古老的Perl 5模块CGI.

更新:

这个早期Perl 6模块的这个时髦代码是什么:

use CGI:from<perl5>;
Run Code Online (Sandbox Code Playgroud)

是否使用":from"指令来唤起某种Perl 5兼容层.似乎找不到任何关于它的文档.

perl cpan rakudo raku

14
推荐指数
2
解决办法
1548
查看次数

perl6占位符变量和主题变量

Perl 6中同时存在占位符变量和主题变量。例如,以下两个语句相同

say ( $_ * 2 for 3, 9 );        # use topic variables                 
say ( { $^i * 2 } for 3, 9 );   # use placeholder variables
Run Code Online (Sandbox Code Playgroud)

在我看来,从主题变量中获得的唯一好处就是节省了一些键盘笔触。

我的问题是:是否存在用例,其中主题变量比占位符变量方便得多?

perl6 raku

14
推荐指数
2
解决办法
147
查看次数

你能用非utf8编码编写Perl 6脚本吗?

Perl 5有encodingpragmaFilter::Encoding模块,但是,我没有在Perl 6中发现任何类似的东西.我想最终会创建源过滤器,但是暂时,你能在Pe​​rl 6脚本中使用其他编码吗?

encoding perl6 raku

13
推荐指数
2
解决办法
200
查看次数

Eslint 无法识别使用 nodejs 12 的私有字段声明

Eslint 不会识别类声明中标有 # 的私有字段,即使我使用的是 NodeJS 版本 12(支持它们)。

我正在运行 NodeJS v12.7.0。我已经搜索了所有 DuckDuckGo 和 Google,但在 eslint 中找不到一个插件或选项来告诉它接受私有字段符号 (#)。我已经emca设置为 version 10

class MyClass {
   #foo = 'bar';
   #bar = 'foo';

   constructor(foo, bar) {
      this.#foo = foo;
      this.#bar = bar;
   }
   ...
};
Run Code Online (Sandbox Code Playgroud)

当我运行eslint上面的代码时,我得到:

2:3 error Parsing error: Unexpected character '#'

我正在处理的项目不使用 Babel,我不想仅仅为了使私有字段工作而必须包含它。任何想法如何使这项工作无需求助于使用 Babel?

(当然没有反对 Babel,只是在这个特定的项目上我不想要它)。

private private-members node.js eslint

13
推荐指数
3
解决办法
7048
查看次数

如何改进语法中的错误报告?

如果语法不匹配,有没有办法让Perl 6生成错误消息?或者至少返回它处理的最后一个数据的位置?如果从解析器获得的所有内容都是"不匹配",则很难修复语法错误.

grammar parsing perl6 raku

12
推荐指数
1
解决办法
560
查看次数

替代:替代评估

如果替换是在变量中传递的,那么第一个和第二个替换是否相等?

#!/usr/bin/env perl6
use v6;

my $foo = 'switch';
my $t1 = my $t2 = my $t3 = my $t4 = 'this has a $foo in it';

my $replace = prompt( ':' ); # $0

$t1.=subst( / ( \$ \w+ ) /, $replace );
$t2.=subst( / ( \$ \w+ ) /, { $replace } );
$t3.=subst( / ( \$ \w+ ) /, { $replace.EVAL } );
$t4.=subst( / ( \$ \w+ ) /, { ( $replace.EVAL ).EVAL } );

say …
Run Code Online (Sandbox Code Playgroud)

replace eval subst perl6

12
推荐指数
1
解决办法
132
查看次数