Как вернуть пустую руну - PullRequest
       36

Как вернуть пустую руну

0 голосов
/ 05 сентября 2018

Я смотрю на функцию string.Map, которая должна принимать функцию отображения, которая возвращает руну. Я хотел бы устранить руны, которые разрешают ложь с помощью вызова: unicode.IsPrint()

func Map(mapping func(rune) rune, s string) string

Моя функция выглядит примерно так:

func main() { 
func CleanUp(s string) string {

    clean := func(r rune) rune {
        if unicode.IsPrint(r) || r == rune('\n') {
            return r
        }
        return rune('')
    }

strings.Map(clean, s)
}

Это должно очистить что-то вроде этого "helloworld ' \x10" до "helloworld ' "

Но rune('') недействителен. Как вернуть пустую или пустую руну?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Если вы хотите уничтожить руны, «пустая руна» - не тот путь. Это ничего не устранит.

Если вы говорите о strings.Map, в документах написано

Если отображение возвращает отрицательное значение, символ удаляется из строки без замены.

Пусть ваш картограф вернет отрицательное значение, чтобы указать, что руна должна быть отброшена.

0 голосов
/ 05 сентября 2018

Из того, что я понимаю, руна на самом деле является целочисленным значением, сопоставленным с символом Unicode, поэтому этот фрагмент кода на самом деле возвращает символ \0, если проверка условия не удалась:

package main

import (
    "fmt"
    "strings"
    "unicode"
)

func main() {
    fmt.Println(CleanUp("helloworld ' \x10"))
}

func CleanUp(s string) string {

    clean := func(r rune) rune {
        if unicode.IsPrint(r) || r == rune('\n') {
            return r
        }
        return rune(0)
    }

    return strings.Map(clean, s)
}

Выходы

helloworld '

...