加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby“diff-lcs”diff输出的一般格式是什么?

发布时间:2020-12-17 02:18:44 所属栏目:百科 来源:网络整理
导读:Ruby diff-lcs library可以很好地生成从一个序列到另一个序列所需的变更集,但输出的格式对我来说有点混乱.我希望有一个更改列表,但输出始终是一个包含一个或两个更改列表的列表.拥有多个更改列表的含义/意图是什么? 考虑以下简单示例: Diff::LCS.diff('abc
Ruby diff-lcs library可以很好地生成从一个序列到另一个序列所需的变更集,但输出的格式对我来说有点混乱.我希望有一个更改列表,但输出始终是一个包含一个或两个更改列表的列表.拥有多个更改列表的含义/意图是什么?

考虑以下简单示例:

> Diff::LCS.diff('abc','a-c')
# => [[#<Diff::LCS::Change:0x01 @action="-",@position=1,@element="b">,#      #<Diff::LCS::Change:0x02 @action="+",@element="-">],#     [#<Diff::LCS::Change:0x03 @action="-",@position=3,@element="">]]

忽略the last change is blank的事实,为什么有两个变更列表而不是一个?

解决方法

你可能会有一个更好的例子.如果你这样做:

Diff::LCS.diff('ab cd','a- c_')

然后输出看起来像这样(去除了噪音):

[
  [
    <@action="-",<@action="+",@element="-">
  ],[
    <@action="-",@position=4,@element="d">,@element="_">
  ]
]

如果我们看一下Diff :: LCS.diff(‘ab cd ef’,’a-c_ e’),那么我们得到三个内部数组而不是两个.

可能的原因是什么?差异中有三个操作:

>添加一个字符串.
>删除字符串.
>更改字符串.

更改实际上只是删除和添加的组合所以我们只需删除并添加作为基本操作;这些与@action值非常吻合.但是,当人们看到差异时,我们希望看到一个变化作为一个独特的操作,我们希望看到b已成为 -??,“删除b,添加 – ”版本是一个实现细节.

如果我们只有这个:

[
  <@action="-",@element="-">,<@action="-",@element="_">
]

然后你必须弄清楚哪些/ – 对真的是变化,哪些是单独的添加和删除.

因此内部数组将两个基本操作(添加,删除)映射到人们想要看到的三个操作(添加,删除,更改).

您可能还想检查这些输出的结构:

> Diff :: LCS.diff(‘ab cd’,’a-x c_’)
> Diff :: LCS.diff(‘ab’,’abx’)
> Diff :: LCS.diff(‘ab’,’xbx’)

我认为对Diff :: LCS :: Change的显式更改@action会更好,但至少内部数组允许您将各个添加和删除分组到更高级别的编辑中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读