Работа со строками и подстроками - PullRequest
0 голосов
/ 01 июля 2018

Учитывая, что:

julia> SubString <: String
false

Как бы вы написали функцию, которая принимает как подстроки, так и строки?

julia> function myfunction(ss::String)
           @show ss, typeof(ss)
       end
myfunction (generic function with 1 method)

julia> myfunction("Hello World")
(ss, typeof(ss)) = ("Hello World", String)
("Hello World", String)

julia> s = split("Hello World")
2-element Array{SubString{String},1}:
 "Hello"
 "World"

julia> foreach(x -> myfunction(x), s)
ERROR: MethodError: no method matching myfunction(::SubString{String})
Closest candidates are:
  myfunction(::String) at REPL[11]:2

1 Ответ

0 голосов
/ 01 июля 2018

Я думаю, что есть два способа сделать это:

  1. Используйте AbstractString вместо String в определении функции;

  2. Определите функцию дважды, один раз для String и один раз для SubString, что сгенерирует myfunction (generic function with 2 methods).

Дело в том, что SubString является подтипом AbstractString, а не String. Вы можете увидеть это, введя supertype(SubString).

...