diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index 8e8d306867..656d06be66 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -1354,6 +1354,10 @@ pub fn (s string) fields() []string { return s.replace('\t', ' ').split(' ') } +pub fn (s string) map(func fn(byte) byte) string { + return string(s.bytes().map(func(it))) +} + // Allows multi-line strings to be formatted in a way that removes white-space // before a delimeter. by default `|` is used. // Note: the delimiter has to be a byte at this time. That means surrounding diff --git a/vlib/builtin/string_test.v b/vlib/builtin/string_test.v index bb7f0c8e96..834838f580 100644 --- a/vlib/builtin/string_test.v +++ b/vlib/builtin/string_test.v @@ -742,6 +742,19 @@ fn test_double_quote_inter() { assert '${a} ${b}' == "1 2" } +fn test_string_map() { + a := 'Hello'.map(fn (b byte) byte { + return b + 1 + }) + assert a == 'Ifmmp' + + assert 'foo'.map(foo) == r'\ee' +} + +fn foo(b byte) byte { + return b - 10 +} + fn test_split_into_lines() { line_content := 'Line' text_crlf := '${line_content}\r\n${line_content}\r\n${line_content}'