我们有一个JSON文件,其中包含大型文本作为JSON对象中的字符串.那些字符串以及它们所处的线条相当长.在对文本进行更改时,我们希望更好地了解更改.
git diff --word-diff
Run Code Online (Sandbox Code Playgroud)
在控制台上完美地工作以可视化已更改的单词.
我创建了一个diff-wrapper.sh脚本,使其成为默认行为:
#!/bin/sh
git --no-pager diff --color-words "$2" "$5"
exit 0
Run Code Online (Sandbox Code Playgroud)
并设置它(对于此存储库):
git config diff.external ./diff-wrapper.sh
Run Code Online (Sandbox Code Playgroud)
现在,我想在VS Code的diff窗口中看到相同的输出,但我没有.
是否有实现这一目标的环境?通过使VS代码为该存储库使用本机git diff命令或在VS Code首选项中设置类似的"外部"diff命令?在https://code.visualstudio.com/docs/customization/userandworkspace上,我只找到diff编辑器的这些选项:
// Controls if the diff editor shows the diff side by side or inline
"diffEditor.renderSideBySide": true,
// Controls if the diff editor shows changes in leading or trailing whitespace as diffs
"diffEditor.ignoreTrimWhitespace": true,
Run Code Online (Sandbox Code Playgroud)
另外:终端在diff中包含长行,VS Code没有.是否有设置在差异中做到这一点?
像Haskell,Rust等语言提供Maybe
或Option
类型.即使在Java中,现在也有一种Optional
类型.
为简单起见,我将在剩下的问题中将此类型称为"选项类型"." 可选类型"显然通常用于描述提供类型注释是可选的情况.
我对以下内容很好奇:Option类型在TypeScript等语言中是否有意义?Option类型的优点在其他语言中非常有说服力,我发现自己在TypeScript编程时缺少类型.
基本上,类型系统强制您显式解包可能在Option值中的任何值.是的,TypeScript的严格空检查也可以实现这一点,但是,使用Option类型为您提供(在我看来)None
通过提供map(f: T -> U): Option<U>
和mapOr(f: T -> U, or: U): Option<U>
方法等处理潜在价值的更好方法.
例如,我想像以下代码一样工作:
interface Foo {
member: Option<string>
}
const opt: Option<Foo> = // ... some initialization
const memberLength: number = opt
.map(x => x.member) // None if x is None, else Some(...)
.map(x => x.length) // None if x.member is None, else Some(x.length)
.unwrapOrElse(() => 0);
Run Code Online (Sandbox Code Playgroud)
这当然是一个非常简单的例子,其中使用Option类型有点过度设计.不过,它应该给出一个基本的想法.
我目前没有看到为什么这是一个坏主意的原因,但据我所知,似乎没有人实现它.这会对性能造成严重影响吗?或者是否有任何其他问题我无法看到使这不可行?
注意:我(主要)不是要求如何实现这一点(虽然这也是一个有趣的话题 - 但我对此有所了解).我主要担心的是找出为什么似乎没有人使用这样的东西.