From c20972c79b2a76d580bde0204d9d0139e10ada64 Mon Sep 17 00:00:00 2001 From: Luke Adams Date: Sun, 25 Jun 2017 09:37:27 -0600 Subject: [PATCH 1/8] added char concat methods --- base/strings/basic.jl | 3 +++ test/strings/basic.jl | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index e31b2218de920..848a9f0e82b0e 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -68,6 +68,9 @@ julia> "Hello " * "world" ``` """ (*)(s1::AbstractString, ss::AbstractString...) = string(s1, ss...) +(*)(c::Char, s::AbstractString) = string(c, s) +(*)(s::AbstractString, c::Char) = string(s, c) +(*)(c1::Char, c2::Char) = string(c1, c2) one(::Union{T,Type{T}}) where {T<:AbstractString} = convert(T, "") diff --git a/test/strings/basic.jl b/test/strings/basic.jl index 747e92151b508..4a28df7d982ee 100644 --- a/test/strings/basic.jl +++ b/test/strings/basic.jl @@ -469,3 +469,8 @@ Base.endof(x::CharStr) = endof(x.chars) # issue #12495: check that logical indexing attempt raises ArgumentError @test_throws ArgumentError "abc"[[true, false, true]] @test_throws ArgumentError "abc"[BitArray([true, false, true])] + +@test "ab" * "cd" == "abcd" +@test 'a' * "bc" == "abc" +@test "ab" * 'c' == "abc" +@test 'a' * 'b' == "ab" From c6dec74af8757931e0e76ff11a3cc42603cb0448 Mon Sep 17 00:00:00 2001 From: Luke Adams Date: Sun, 25 Jun 2017 09:37:27 -0600 Subject: [PATCH 2/8] added char concat methods added extra tests --- base/strings/basic.jl | 3 +++ test/strings/basic.jl | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index e31b2218de920..848a9f0e82b0e 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -68,6 +68,9 @@ julia> "Hello " * "world" ``` """ (*)(s1::AbstractString, ss::AbstractString...) = string(s1, ss...) +(*)(c::Char, s::AbstractString) = string(c, s) +(*)(s::AbstractString, c::Char) = string(s, c) +(*)(c1::Char, c2::Char) = string(c1, c2) one(::Union{T,Type{T}}) where {T<:AbstractString} = convert(T, "") diff --git a/test/strings/basic.jl b/test/strings/basic.jl index 747e92151b508..c29cf9ec6ac8b 100644 --- a/test/strings/basic.jl +++ b/test/strings/basic.jl @@ -469,3 +469,10 @@ Base.endof(x::CharStr) = endof(x.chars) # issue #12495: check that logical indexing attempt raises ArgumentError @test_throws ArgumentError "abc"[[true, false, true]] @test_throws ArgumentError "abc"[BitArray([true, false, true])] + +@test "ab" * "cd" == "abcd" +@test 'a' * "bc" == "abc" +@test "ab" * 'c' == "abc" +@test 'a' * 'b' == "ab" +@test 'a' * "b" * 'c' == "abc" +@test "a" * 'b' * 'c' == "abc" From 7313f5d4024012753a869381b66c621e20e55575 Mon Sep 17 00:00:00 2001 From: Luke Adams Date: Sun, 25 Jun 2017 17:51:28 -0600 Subject: [PATCH 3/8] condense methods --- base/strings/basic.jl | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 848a9f0e82b0e..5417f95aa8e94 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -67,10 +67,7 @@ julia> "Hello " * "world" "Hello world" ``` """ -(*)(s1::AbstractString, ss::AbstractString...) = string(s1, ss...) -(*)(c::Char, s::AbstractString) = string(c, s) -(*)(s::AbstractString, c::Char) = string(s, c) -(*)(c1::Char, c2::Char) = string(c1, c2) +(*)(s1::Union{Char, AbstractString}, ss::Union{Char, AbstractString}...) = string(s1, ss...) one(::Union{T,Type{T}}) where {T<:AbstractString} = convert(T, "") From c377c83d3fdcd1080ae4299df75266da6cae09a4 Mon Sep 17 00:00:00 2001 From: Luke Adams Date: Sun, 25 Jun 2017 19:53:34 -0600 Subject: [PATCH 4/8] update docstring --- base/strings/basic.jl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 5417f95aa8e94..1cdd3a738fdf3 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -56,15 +56,16 @@ sizeof(s::AbstractString) = error("type $(typeof(s)) has no canonical binary rep eltype(::Type{<:AbstractString}) = Char """ -``` -*(s::AbstractString, t::AbstractString) -``` + *(s::Union{Char, AbstractString}, t::Union{Char, AbstractString}) -Concatenate strings. The `*` operator is an alias to this function. +Concatenate strings and characters. The `*` operator is an alias to this function. ```jldoctest julia> "Hello " * "world" "Hello world" + +julia> 'j' * "ulia" +"julia" ``` """ (*)(s1::Union{Char, AbstractString}, ss::Union{Char, AbstractString}...) = string(s1, ss...) From f9dd68c50281e140c6a8d35d83c2e3e516191515 Mon Sep 17 00:00:00 2001 From: Luke Adams Date: Sun, 25 Jun 2017 20:04:12 -0600 Subject: [PATCH 5/8] add ... --- base/strings/basic.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 1cdd3a738fdf3..378ac1b6f1f3c 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -56,7 +56,7 @@ sizeof(s::AbstractString) = error("type $(typeof(s)) has no canonical binary rep eltype(::Type{<:AbstractString}) = Char """ - *(s::Union{Char, AbstractString}, t::Union{Char, AbstractString}) + *(s::Union{Char, AbstractString}, t::Union{Char, AbstractString}...) Concatenate strings and characters. The `*` operator is an alias to this function. From 7d557d2703f2d50c88a55a22a2d2cf72e7efd015 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Thu, 29 Jun 2017 22:23:22 -0700 Subject: [PATCH 6/8] Minor docstring improvement --- base/strings/basic.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 378ac1b6f1f3c..01cdb74fff55f 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -56,9 +56,12 @@ sizeof(s::AbstractString) = error("type $(typeof(s)) has no canonical binary rep eltype(::Type{<:AbstractString}) = Char """ - *(s::Union{Char, AbstractString}, t::Union{Char, AbstractString}...) + *(s::Union{AbstractString, Char}, t::Union{AbstractString, Char}) -Concatenate strings and characters. The `*` operator is an alias to this function. +Concatenate strings and/or characters, producing a [`String`](@ref). This is equivalent +to calling the [`string`](@ref) function on the arguments. + +# Examples ```jldoctest julia> "Hello " * "world" From df56a8f2920b0d6ffad65ba3da539a92f2af0c77 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Thu, 29 Jun 2017 22:34:24 -0700 Subject: [PATCH 7/8] Remove line --- base/strings/basic.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 01cdb74fff55f..81a9e55f193ee 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -62,7 +62,6 @@ Concatenate strings and/or characters, producing a [`String`](@ref). This is equ to calling the [`string`](@ref) function on the arguments. # Examples - ```jldoctest julia> "Hello " * "world" "Hello world" From a1577a1cd33d0ac6f320ed7f931bd1319ffb6d1f Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Tue, 11 Jul 2017 11:45:26 -0700 Subject: [PATCH 8/8] Add back the ... [ci skip] --- base/strings/basic.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 0b658b0b577b1..c3c0e181fbb03 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -59,7 +59,7 @@ sizeof(s::AbstractString) = error("type $(typeof(s)) has no canonical binary rep eltype(::Type{<:AbstractString}) = Char """ - *(s::Union{AbstractString, Char}, t::Union{AbstractString, Char}) + *(s::Union{AbstractString, Char}, t::Union{AbstractString, Char}...) Concatenate strings and/or characters, producing a [`String`](@ref). This is equivalent to calling the [`string`](@ref) function on the arguments.