Ruby diff-lcs
library在生成需要從一個序列到另一個序列的變更集方面做得非常出色,但是輸出的格式對我來說有點令人困惑。我希望有一個更改列表,但輸出始終是包含一個或兩個更改列表的列表。有多個變更清單的含義/意圖是什麼?Ruby「diff-lcs」diff輸出的一般格式是什麼?
考慮以下簡單的例子:
> Diff::LCS.diff('abc', 'a-c')
# => [[#<Diff::LCS::Change:0x01 @action="-", @position=1, @element="b">,
# #<Diff::LCS::Change:0x02 @action="+", @position=1, @element="-">],
# [#<Diff::LCS::Change:0x03 @action="-", @position=3, @element="">]]
忽略的事實是the last change is blank,爲什麼有變化,而不是隻是一個兩個列表?
啊是的,這看起來是正確的 - 每個內部數組代表一個「變化」(一個「刪除/添加」對在同一位置)。所以'Diff :: LCS.diff('a1 b2 c3 d4','aw bx cy dz')。size#=> 4'因爲有四個變化。謝謝! – maerics
@maerics:是的,如果只有一個平面編輯列表,您必須手動匹配「@位置」值以從ASM級別列表「Diff :: LCS ::」中提取C級編輯Change's。 [Perl版本的文檔](http://search.cpan.org/dist/Algorithm-Diff/lib/Algorithm/Diff.pm#diff)值得一看:「描述是* hunk的列表* ;每個大塊代表應該添加,刪除或替換的項目的連續部分。'diff'的返回值是一個hunk的列表...' –
我理解數組的數組結構,但我是仍然想知道我將如何獲得人性化的差異。比如'old content'包裹在'del'標籤中,'new sentence'包裹在'add'標籤中。 – Archonic