闭包装(function($){..})(jQuery);是一种使用局部变量而不是全局变量的好方法.$包装器中定义的两者和任何变量和局部函数仅在包装器内可见,而不在外部.这太好了,我一直都在使用它.
(function($){
[..]
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
但是,我一直想知道为什么我们传递jQuery(可能还有其他东西)作为参数,而不是使用局部变量声明.
(function(){
var $ = jQuery;
[..]
})();
Run Code Online (Sandbox Code Playgroud)
这不会一样好,而且更透明吗?
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) 考虑以下代码。
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 中的 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 …
我有一个本地工作流程
例如,一种方法可以做到这一点:
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”开头的提交。
如果有另一个命令可以实现这一点,为什么不呢。不一定非得挑剔。