sihui_io

sihui_io

rest is [“a”] and last_gift is “b”.
rest |> Enum.join(", “) returns “a”, which is a string.
“a” |> “#{}, and #{last_gift}” returns “a, and b”.
But when I pipe them together, I get ArgumentError.
rest |> Enum.join(”, ") |> “#{}, and #{last_gift}”
** (ArgumentError) argument error

What do I miss? :thinking:

Showing Posts 12 to 3

adworse

adworse

Looks totally OK, it’s relatively new though; there was no such syntax three years ago :slight_smile:

cantiero

cantiero

This version looks ok IMO:

"test"
|> then(&"shmest #{&1}")
adworse

adworse

You actually kind of may pipe a variable into the string interpolation if it’s wrapped into the anonymous function call, like "test" |> (&"shmest #{&1}").()

Looks ugly though.

sihui_io

sihui_io OP

That makes sense now, thanks!

sihui_io

sihui_io OP

Didn’t know about quote until now. Seems super useful, thanks!

That explains the ArgumentError:

iex(84)> x = "a"
"a"
iex(85)> quote do: "bb#{x}"
{:<<>>, [],
 [
   "bb",
   {:::, [],
    [
      {{:., [], [Kernel, :to_string]}, [], [{:x, [], Elixir}]},
      {:binary, [], Elixir}
    ]}
 ]}
iex(86)> quote do: x|> "bb#{}"
{:|>, [context: Elixir, import: Kernel],
 [
   {:x, [], Elixir},
   {:<<>>, [],
    [
      "bb",
      {:::, [],
       [
         {{:., [], [Kernel, :to_string]}, [], [{:__block__, [], []}]},
         {:binary, [], Elixir}
       ]}
    ]}
 ]}

Basically #{} expects an argument to be passed in, but we are not passing anything to #{} when we do x |> "bb#{}". But "bb#{x}" does.

voltone

voltone

Right, so "234#{five}" is actually <<"234", five::binary>>, which is invoking Kernel.SpecialForms.<<>>. Piping something into that prepends the value at the front of that binary, if it is a legal parameter to <<>>.

So in the end "1" |> "234#{five}" expands to <<"1", "234", five::binary>> which happens to be legal. I don’t think it’s intentional.

kokolegorille

kokolegorille

Underneath, it’s

iex> quote do: "aa" |> "bb#{}" 
{:|>, [context: Elixir, import: Kernel],
 [
   "aa",
   {:<<>>, [],
    [
      "bb",
      {:::, [],
       [
         {{:., [], [Kernel, :to_string]}, [], [{:__block__, [], []}]},
         {:binary, [], Elixir}
       ]}
    ]}
 ]}
sihui_io

sihui_io OP

ah, yeah…
I wonder if it’s actually a bug now…
:point_down: doesn’t seem to be an intended behavior, then…

iex(72)> "a" |> "This is: , and #{last}"
"aThis is: , and b"
kokolegorille

kokolegorille

It does not mean it’s piping a string into a string either…

iex> "aa" |> "bb"
** (ArgumentError) cannot pipe "aa" into "bb", can only pipe into local calls foo(), remote calls Foo.bar() or anonymous functions calls foo.()
    (elixir) lib/macro.ex:156: Macro.pipe/3
    (stdlib) lists.erl:1263: :lists.foldl/3
    (elixir) expanding macro: Kernel.|>/2
    iex:35: (file)
iex> "aa" |> "bb#{}"
"aabb"
sihui_io

sihui_io OP

It turns out a |> "#{}" doesn’t mean we are actually interpolating a into the position of #{}

iex(71)> "a" |> "This is: #{}, and #{last}"
"aThis is: , and b"
iex(72)> "a" |> "This is: , and #{last}"
"aThis is: , and b"

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
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
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
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
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
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
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
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

Latest on Elixir Forum

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews