idi527

idi527

I’ve been re-reading swift book again and noticed that multiline strings there don’t have a trailing line break, unlike in elixir

iex(2)> """
...(2)> asdf
...(2)> """
"asdf\n"

I wonder how I would create a multiline string without a trailing line break with elixir.

In swift I can add a line break by adding a newline

let lineBreaks = """
 
This string starts with a line break.
It also ends with a line break.
 
"""

which is the same as

line_breaks = """

This string starts with a line break.
It also ends with a line break.
"""

in elixir.

I feel like swift’s way is a bit more consistent and gives freedom to chose how to end the string.

Is there a reason for elixir’s multiline string to be different? I see only one advantage to this approach:

ab = """
a
b
"""

c = """
c
"""

ab <> c == """
a
b
c
"""

In swift it would be

"""
a
bc
"""

but can be fixed by adding a new line at the end of ab.

Showing Posts 1 to 10

NobbZ

NobbZ

"""
Foo"""

# or even

"""Foo"""

I prefer the elixir behaviour over the swift one, as elixir complies with POSIX that text files should always end in a newline.

OvermindDL1

OvermindDL1

Uh, if Elixir worked that way I’d be fine with it, but it doesn’t, and based on the way Elixir’s does work I’d prefer Swift’s way as well:

╰─➤  iex
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:6:6] [ds:6:6:10] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (1.6.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> """
...(1)> Foo"""
** (SyntaxError) iex:2: invalid location for heredoc terminator, please escape token or move it to its own line: """

iex(1)> """Foo"""
** (SyntaxError) iex:1: heredoc start must be followed by a new line after """

the heck forum syntax coloring borked ^.^;

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe
iex(7)> """
...(7)> foo\
...(7)> """
"foo"
18
Post #3
NobbZ

NobbZ

Hmmm? Did they remove this syntax? I think I used it in some old code… Perhaps I’m misremembering things though…

OvermindDL1

OvermindDL1

I remember a PR about strengthening the messages when it was mis-used, but I don’t actually remember if it was valid at one point or not? I’m kind of thinking it was too, but that could easily be another language I’m thinking about. ^.^;

thbar

thbar

In case someone stumbles on this thread: the “\” at the end to avoid newline still appears to work with recent versions of Elixir.

iex(1)> """
...(1)> foo\
...(1)> """
"foo"
iex(2)> """
...(2)> foo
...(2)> """
"foo\n"
adamu

adamu

"""
foo
"""
|> String.trim_trailing("\n")

Is clearer than mysterious backslashes IMO :slight_smile:

It’s subtly different though, because it will trim all trailing newlines, not just a single character.

If you only want to remove the last newline:

|> String.replace_suffix("\n", "")
przemyxe0p

przemyxe0p

I was looking for this in documentation, and did not found information about, seems like important thing “how to not end string with line break when using multi-line string”. Did you find it in documentation?
@OvermindDL1 @thbar @benwilson512 @NobbZ sorry for call outs, but I don’t know if you will see this message

adamu

adamu

You could open a PR to propose it, if you think it’s worthwhile. Maybe here:

Strings

przemyxe0p

przemyxe0p

Thanks, will do :slight_smile:

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
psy-q
I’m trying to set up Emacs with elixir-ls via lsp-mode and credo via Flycheck. This should mostly be preconfigured as Flycheck picks up c...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews