Предупреждение устарело: Stdlib.String.set - PullRequest
0 голосов
/ 28 мая 2020

Следующий код возвращает ошибку и говорит, что синтаксис устарел. Как правильно изменить символ в строке?

let hello = "Hello!" ;;
hello.[1] <- 'a' ;;
Alert deprecated: Stdlib.String.set
Use Bytes.set instead.
Error: This expression has type string but an expression was expected of type
         bytes

1 Ответ

2 голосов
/ 28 мая 2020

Строки неизменяемы (или, по крайней мере, скоро они станут), поэтому вы не можете изменить их содержимое. Вы, конечно, можете создать копию строки с одним другим символом, например,

let with_nth_char m c = 
  String.mapi (fun i b -> if i = m then c else b)

и

# with_nth_char 1 'E' "hello";;
- : string = "hEllo"

Но если вам нужно изменить символы в массиве, тогда вам не следует использовать тип данных string, а вместо этого полагаться на bytes, который является типом изменяемых строк. Вы можете использовать Bytes.of_strings и Bytes.to_string для перевода строк в байты и наоборот.

...