# Behavior of broadcasted chop

**URL:** <https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310>\
**Category:** Internals & Design\
**Tags:** question\
**Created:** [January 12, 2018, 9:30am UTC](https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310 "2018-01-12T09:30:44Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [January 12, 2018, 9:30am UTC](https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310/1 "2018-01-12T09:30:44Z")

</div>

I do not understand the following behavior:

```julia
julia> x = "ab"
"ab"

julia> dump(chop(x))
SubString{String}
  string: String "ab"
  offset: Int64 0
  ncodeunits: Int64 1

julia> dump(chop.([x]))
Array{SubString{String}}((1,))
  1: SubString{String}
    string: String "a"
    offset: Int64 0
    ncodeunits: Int64 1

```

Why does broadcasting of `chop` change `string` field of `SubString`?

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [January 12, 2018, 9:42am UTC](https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310/2 "2018-01-12T09:42:06Z")

</div>

This is `master`, not `v0.6.2`, right?

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [January 12, 2018, 9:59am UTC](https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310/3 "2018-01-12T09:59:27Z")

</div>

Right. Under 0.6.2 it works OK. That is why I have put it under _Development_ tag. To be precise I use:

```julia
Julia Version 0.7.0-DEV.3354
Commit 9b5eed2b6c* (2018-01-09 08:03 UTC)

```

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [January 12, 2018, 10:25am UTC](https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310/4 "2018-01-12T10:25:19Z")

</div>

This is weird, as `chop` apparently gets the `"ab"`. Can reproduce with `map` too.

```julia
julia> VERSION
v"0.7.0-DEV.3385"

julia> x = "ab";

julia> justdump(x) = (print("called with "); dump(x); x);

julia> dump(map(chop ∘ justdump, [x]))
called with String "ab"
Array{SubString{String}}((1,))
  1: SubString{String}
    string: String "a"
    offset: Int64 0
    ncodeunits: Int64 1

julia> dump(map(chop, [x]))
Array{SubString{String}}((1,))
  1: SubString{String}
    string: String "a"
    offset: Int64 0
    ncodeunits: Int64 1

```

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [January 12, 2018, 11:43am UTC](https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310/5 "2018-01-12T11:43:07Z")

</div>

I have found the offending operation:

```julia
convert(::Type{SubString{S}}, s::AbstractString) where {S<:AbstractString} =
    SubString(convert(S, s))

```

I think defining additionally

```julia
convert(::T, s::T) where {T<:SubString} = s

```

should fix the problem.

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [January 12, 2018, 11:53am UTC](https://discourse.julialang.org/t/behavior-of-broadcasted-chop/8310/6 "2018-01-12T11:53:26Z")

</div>

PR [https://github.com/JuliaLang/julia/pull/25525](https://github.com/JuliaLang/julia/pull/25525)
