小编Gre*_*con的帖子

什么是@ $ ref - > {@ keys}试图访问?

在对有关散列片的问题答案的评论中,有人想知道如何使用箭头语法通过散列引用访问散列片,想想也许

@$ref->{@keys}
Run Code Online (Sandbox Code Playgroud)

会这样做的.

是的,正确的语法是@$ref{@keys}或者@{$ref}{@keys},但这不是这个问题的重点.

我试图找出带箭头的表达式所需的数据结构:

#! /usr/bin/env perl

use strict;
use warnings;

my $ref = {"a" => 1, "b" => 2, "c" => 3};

my @keys = qw/ a b c /;

#$ref = [ { a => 9, b => 8, c => 7 } ];
#$ref = [ { a => {}, b => {}, c => {} } ];
print @$ref->{@keys}, "\n";
Run Code Online (Sandbox Code Playgroud)

如上所述,代码失败了

Not an ARRAY reference at ./prog …

syntax perl reference

11
推荐指数
2
解决办法
330
查看次数

如何将更改的行与C代码的git存储库中的函数相关联?

我试图从存储在git存储库中的多年历史中构建一个"热图",其中粒度单位是单独的函数.函数应该变得更热,因为它们更频繁地更改次数,并且更改非空行更多.

首先,我检查了输出

git log --patch -M --find-renames --find-copies-harder --function-context -- *.c
Run Code Online (Sandbox Code Playgroud)

我看过使用Hackage中的Language.C,但它似乎想要一个完整的翻译单元扩展标题和所有 - 而不是能够处理源片段.

--function-context选项是自1.7.8版以来的新选项.v1.7.9.4中的实现基础是一个正则表达式:

PATTERNS("cpp",
         /* Jump targets or access declarations */
         "!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:.*$\n"
         /* C/++ functions/methods at top level */
         "^([A-Za-z_][A-Za-z_0-9]*([ \t*]+[A-Za-z_][A-Za-z_0-9]*([ \t]*::[ \t]*[^[:space:]]+)?){1,}[ \t]*\\([^;]*)$\n"
         /* compound type at top level */
         "^((struct|class|enum)[^;]*)$",
         /* -- */
         "[a-zA-Z_][a-zA-Z0-9_]*"
         "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
         "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
Run Code Online (Sandbox Code Playgroud)

这似乎可以很好地识别边界,但并不总是将函数作为差异块的第一行,例如,#include顶部的指令或包含多个函数定义的块.告诉diff为每个更改的函数发出单独的数据库的选项非常有用.

这不是安全关键,所以我可以忍受一些失误.这是否意味着我可能有Zawinski的"两个问题"

c c++ regex git parsing

11
推荐指数
1
解决办法
535
查看次数

为什么不提交遵循merge-base错误?

我们对git的过程是定期合并到我们的主分支,以便可以将更改合并回我们的最新功能分支.由于最近几轮从一个分支合并到另一个分支,我们遇到的问题是解决方案不明确.

我们有一个存储库,其中包含19个子模块.当我们合并所有子模块时,我们看到我们认为是预期输出告诉我们文件被修改,冲突等等.然后当我们进入"根"存储库的合并时,一切都向南,我们看到一些以下输出(编辑以指出问题).

warning: Failed to merge submodule projects/foo1 (commits don't follow merge-base)
warning: Failed to merge submodule projects/foo2 (commits don't follow merge-base)
warning: Failed to merge submodule projects/foo3 (not fast-forward)

Found a possible merge resolution for the submodule:
 931a61165f3b2079523a122477fa5f44c123406d: Comment of last merge

If this is correct simply add it to the index for example by using:

 git update-index --cacheinfo 160000 931a61165f3b2079523a122477fa5f44c123406d "projects/foo3"

which will accept this suggestion.
Run Code Online (Sandbox Code Playgroud)

现在,我们可以运行建议的git update-index命令.这将使git对这一个子模块感到高兴,但我们以前从未必须运行它.在查看没有显示帮助的foo1和foo2子模块时,问题非常严重.

git git-merge git-submodules

11
推荐指数
1
解决办法
4436
查看次数

静态打字如何限制宏?

我正在阅读保罗格雷厄姆的"百年语言"一文.

http://www.paulgraham.com/hundred.html

在那里,他声称静态输入"排除[s]真正的宏".

例如,类型似乎是取之不尽的研究论文来源,尽管静态类型似乎排除了真正的宏 - 否则,在我看来,没有语言值得使用.

这是怎么回事?论文在哪里?我尝试在Google上搜索但没有成功.

macros programming-languages static-typing

10
推荐指数
1
解决办法
871
查看次数

什么编程任务为monad提供了突破?

在最近一篇关于他写过的概率monad的博客文章中,Mark Dominus写道:"所以我觉得我终于到了,monadwise."

我的第一个monadic程序是使用parsecMaybe monadProject Euler中解决问题32的尴尬.

当灯光最终为你打开时你在做什么?至少提供您编写的代码草图.知道你现在知道什么,你会如何改进它?为什么?

monads haskell

10
推荐指数
1
解决办法
1129
查看次数

os.getenv返回None而不是正确的值

我有一个我无法发布的复杂软件,也没有具体的工作示例.我会尝试解释这个问题,也许有人曾经遇到过这个问题.

在Linux shell上我定义了一个环境变量:

> export MY_TEST_ENV=4711
> echo $MY_TEST_ENV
> 4711
Run Code Online (Sandbox Code Playgroud)

在复杂的代码中我想用这个变量获取

print os.getenv('MY_TEST_ENV')
Run Code Online (Sandbox Code Playgroud)

总是回来None.如果我创建一个测试脚本来测试这种行为,即使是不同文件中的类,我总是得到所需的行为,例如,os.getenv('MY_TEST_ENV')返回正确的值4711.

代码以sudo.开头.

任何想法可能是什么原因?

python linux environment-variables getenv

10
推荐指数
1
解决办法
1万
查看次数

为什么我的Mac上运行的Jenkins不会连接到本地git仓库?

我正在尝试使用Jenkins为我的iOS项目实现自动构建.我添加了Git插件,但是当我尝试将git的URL放在项目的git配置中时,它会在下面的屏幕截图中显示错误.这里Jenkins无法从repo克隆到它的工作区.

屏幕截图

git xcode jenkins

10
推荐指数
1
解决办法
1424
查看次数

我什么时候应该使用rm,git rm,git rm --cached,git add

我正在学习git,但我对不同的登台和提交文件的方式感到困惑.为了解决这个问题,我正在使用目录的比喻:工作目录,登台目录,提交目录.

  • 如果我rm是工作目录中的文件,它只会从我的工作目录中删除它.这是正确的吗?
  • 如果我git rm是工作目录中的文件,则将其从所有三个目录中删除.正确?
  • 如果我git rm --cached是一个文件,它会从我的staged和commit目录中删除该文件,但是将它留在我的工作目录中?
  • 如果我已从工作目录中更新,添加和删除了文件git add .,则会git status显示已添加,删除和更新的暂存文件.我承诺会发生什么?是否从Commit目录中删除了已删除的文件?如果我稍后回滚到该提交,那么这些已删除的文件会重新出现吗?

任何有助于更好地理解这些概念的帮助都会受到赞赏 - 谢谢!

git

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

什么是Perl的$; 变量为?

$;在下面的代码片段中是否有任何1知道什么是(第一个拆分函数参数):

      local(@a) = ();
      local($i) = 0;
      for ($i = 0; $i < $d; $i++) {
         @a = split($;, @b[$i]);
         $c     = @a[0];
      }
Run Code Online (Sandbox Code Playgroud)

除了for循环之外,脚本中没有找到标量.

任何帮助表示赞赏.

perl scalar

9
推荐指数
1
解决办法
776
查看次数

git merge重新应用提交到另一个提交吗?

我今年15岁,刚开始使用源代码控制系统来更好地管理我的代码,所以我对这些东西有点新意.现在我有这个存储库:

[a]---[b]---[d]---[f] master
        \
         \
          [c]---[e]   develop
Run Code Online (Sandbox Code Playgroud)

我想结束这里:

[a]---[b]---[d]---[f]---[g]  master
        \               /
         \             /
          [c]---[e]---/      develop
Run Code Online (Sandbox Code Playgroud)

其中,g相当于执行提交[c][e][f].这是git checkout master; git merge develop吧?

git version-control merge

9
推荐指数
2
解决办法
305
查看次数