小编don*_*ote的帖子

为什么将jQuery作为参数传递给(function($){..})(jQuery)闭包装,而不是局部变量?

闭包装(function($){..})(jQuery);是一种使用局部变量而不是全局变量的好方法.$包装器中定义的两者和任何变量和局部函数仅在包装器内可见,而不在外部.这太好了,我一直都在使用它.

(function($){
  [..]
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

但是,我一直想知道为什么我们传递jQuery(可能还有其他东西)作为参数,而不是使用局部变量声明.

(function(){
  var $ = jQuery;
  [..]
})();
Run Code Online (Sandbox Code Playgroud)

这不会一样好,而且更透明吗?

javascript jquery

4
推荐指数
1
解决办法
280
查看次数

如何控制git diff头中的哈希长度

git diff的输出包含一个标题,如下所示:

index f8fdb16de,78132574a..000000000
Run Code Online (Sandbox Code Playgroud)

git help diff,这解释如下:

2. It is followed by one or more extended header lines (this example shows a merge with two parents):

       index <hash>,<hash>..<hash>
       mode <mode>,<mode>..<mode>
       new file mode <mode>
       deleted file mode <mode>,<mode>
Run Code Online (Sandbox Code Playgroud)

我想使用git diff来创建补丁,我希望这些补丁具有可预测的格式,以便进行比较.为此,我需要一个固定长度的"index .."标题中的哈希.

如何控制这些哈希的长度?

我试过--abbrev = 7,但似乎没有效果.

我仍然看到我的补丁更新如下:

-index 52a2a35..7813257 100755
+index 52a2a357e..78132574a 100755
Run Code Online (Sandbox Code Playgroud)

git git-diff

3
推荐指数
1
解决办法
93
查看次数

PHP(或其他):处理“不可能发生”的异常的策略

考虑以下代码。

class C {}

/**
 * @throws \InvalidArgumentException
 */
function classCreateInstance($class) {
  if (!is_string($class)) {
    throw new \InvalidArgumentException("Class name must be a string.");
  }
  if (!class_exists($class)) {
    throw new \InvalidArgumentException("Class '$class' does not exist.");
  }
  return new $class();
}

/**
 * @return C
 */
function foo() {
  return classCreateInstance(C::class);
}
Run Code Online (Sandbox Code Playgroud)

有一个函数可能会抛出异常,因为它对$class参数一无所知。

另一方面,调用代码知道“C”是一个有效的类名,因此它会假设“InvalidArgumentException”永远不会发生。它希望避免冗长的 try/catch,并且希望避免拥有自己的@throws标签。特别是如果它不被“允许”拥有一个,因为它正在实现一个不注释异常的接口。

但是,从 IDE/自动代码验证的角度来看,忽略此异常是不安全的。

那么..从调用代码的角度处理“几乎不可能”的异常的正确方法是什么?

php exception-handling exception try-catch

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

使用 fputcsv() / fgetcsv() 写入 csv 时数据出现乱码

PHP 中的 fputcsv() 和 fgetcsv() 似乎存在编码问题或错误。

以下 PHP 代码:

$row_before = ['A', json_encode(['a', '\\', 'b']), 'B'];

print "\nBEFORE:\n";
var_export($row_before);
print "\n";

$fh = fopen($file = 'php://temp', 'rb+');

fputcsv($fh, $row_before);

rewind($fh);

$row_after = fgetcsv($fh);

print "\nAFTER:\n";
var_export($row_after);
print "\n\n";

fclose($fh);
Run Code Online (Sandbox Code Playgroud)

给我这个输出:

BEFORE:
array (
  0 => 'A',
  1 => '["a","\\\\","b"]',
  2 => 'B',
)

AFTER:
array (
  0 => 'A',
  1 => '["a","\\\\',
  2 => 'b""]"',
  3 => 'B',
)
Run Code Online (Sandbox Code Playgroud)

很明显,数据在途中被损坏。最初该行只有 3 个单元格,后来该行有 4 个单元格。由于反斜杠也用作转义字符,中间的单元格被分割。

另请参阅 https://3v4l.org/nc1oE 或者此处,使用分隔符、封装、escape_char 的显式值: https: //3v4l.org/Svt7m …

php csv escaping fgetcsv fputcsv

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

git cherry-pick 在提交消息包含字符串/匹配正则表达式的范围内提交吗?

背景/场景

我有一个本地工作流程

  • 我总是在“本地”分支(“master”的祖先)上提交,使用以问题编号开头的提交消息,例如“#123: Some message”。
  • 我创建的功能分支也是“master”的祖先。
  • 然后我使用 rebase 和/或cherry-pick 将提交从本地复制到相应的功能分支。

例如,一种方法可以做到这一点:

git checkout local
git checkout -b 123-my-feature
git rebase -i master
Run Code Online (Sandbox Code Playgroud)

在交互式 rebase 编辑器中,删除消息不以 #123 开头的所有提交。这留下了一个特性分支 123-my-feature,它只包含来自问题 #123 的提交。

稍后,在分支 123-my-feature 已经存在之后,如果消息以 #123 开头,则还需要选择/复制本地上的后续提交到 123-my-feature 分支。这也可以通过交互式 rebase 或单独的cherry-picks 实现。但是过程很繁琐。

有没有办法用cherry-pick来做到这一点,并通过提交消息自动过滤?

例如

git checkout master
git checkout -b 123-my-feature
git cherry-pick master..local --commit-message-begins-with="#123"
Run Code Online (Sandbox Code Playgroud)

或者甚至是一个交互式的cherry-pick,我可以在其中手动删除不以“#123”开头的提交。

如果有另一个命令可以实现这一点,为什么不呢。不一定非得挑剔。

git branch rebase cherry-pick

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