Wie emboss in seiner Antwort angibt, ruft String#include
rb_str_index
auf. Diese Funktion wiederum ruft rb_memsearch
auf, die den Rabin-Karp-String-Suchalgorithmus entsprechend implementiert diesen Beitrag zu ruby-forum.com
.
Die Ruby Language Specification schreibt keinen bestimmten Algorithmus vor. Jede Implementierung kann den von ihnen gewünschten Algorithmus verwenden.
Zum Beispiel in Rubinius , String#include?
ruft String#find_string
:
String#find_string
wird wiederum über die string_index
primitiv:
Das string_index
Primitiv wird vom rubinius::String::index
function:
Dies ist die tatsächliche Implementierung von String#include?
:
So kann der tatsächlich verwendete Algorithmus in rb_str_index gefunden werden.