## Where communities thrive

• Join over 1.5M+ people
• Join over 100K+ communities
• Free without limits
• Create your own community
##### Activity
• 12:49
Blacksmoke16 labeled #12163
• 12:49
Blacksmoke16 labeled #12163
• 10:55
asterite edited #12163
• 10:19
asterite opened #12163
• 02:46
Blacksmoke16 labeled #12162
• 02:42
cyangle labeled #12162
• 02:42
cyangle opened #12162
• Jun 25 17:03
HertzDevil labeled #12161
• Jun 25 17:03
HertzDevil labeled #12161
• Jun 25 17:03
HertzDevil opened #12161
• Jun 25 16:49
Blacksmoke16 labeled #12160
• Jun 25 16:49
Blacksmoke16 labeled #12160
• Jun 25 15:10
I3oris edited #12160
• Jun 25 15:05
I3oris opened #12160
• Jun 25 14:56
Blacksmoke16 labeled #12159
• Jun 25 14:53
I3oris labeled #12159
• Jun 25 14:53
I3oris opened #12159
• Jun 25 11:54
straight-shoota milestoned #12158
• Jun 25 10:59
straight-shoota edited #12158
• Jun 25 10:59
straight-shoota review_requested #12158
George Dietrich
@Blacksmoke16
or make use of overloads for specific types
Jason Waldrip
@jwaldrip
ya, let me see what I can do
Alex Kampa
@alex-kampa
Now here's a bit of a surprise:
puts [1, 2, 3, 4, 5].reduce(0) { |acc, i| acc = acc + 1 if i.to_s =~ /3/ }
Error: undefined method '+' for Nil (compile-time type is (Int32 | Nil))
George Dietrich
@Blacksmoke16
i think you need some parans
parens*
i think the if is making the type of acc possibly nil, because the return value of the block is used to set the acc
.reduce(0) { |acc, i| i.to_s =~ /3/ ? acc + i : acc }
is 3 the expected value here?
From IRC (bridge bot)
@FromIRC
<mfiano> Can someone ELI5 the ~> version operator?
George Dietrich
@Blacksmoke16
From IRC (bridge bot)
@FromIRC
<mfiano> I read that
<mfiano> Maybe I'm dumb
George Dietrich
@Blacksmoke16
afaik its the same as the ^ in other langs
From IRC (bridge bot)
@FromIRC
<riza> mfiano: the idea with ~> is that it allows for upgrades within the specified point but no higher
George Dietrich
@Blacksmoke16
just a shortcut to say allow versions within this range
From IRC (bridge bot)
@FromIRC
<riza> so if you ~> x.y.z, you leave room for z to increment but not y
George Dietrich
@Blacksmoke16
^
From IRC (bridge bot)
@FromIRC
<riza> and if you ~> x.y, y can increment, z can be anythnig and x cannot change
<mfiano> Oh very good. I don't see why you would want to leave room for y or x to upgrade...how can you know anything other than a patch won't break your code?
<riza> its used under the assumption that the project you're referencing follow SemVer
Alex Kampa
@alex-kampa

Thanks @Blacksmoke16 your solution works, even though

puts [1, 2, 3, 4, 5].reduce(0) { |acc, i| i.to_s =~ /3/ ? acc + i : acc }

is a bit harder to read than

puts [1, 2, 3, 4, 5].reduce(0) { |acc, i| acc = acc + 1 if i.to_s =~ /3/ }

but ok I guess that's the price to pay for a compiled language ... and shows that the transition from Ruby to Crystal is not always that easy.

From IRC (bridge bot)
@FromIRC
<riza> mfiano: if the project is following SemVer, then you know that anything which is a breaking change is a major version increment
<mfiano> Ok I see
George Dietrich
@Blacksmoke16
@alex-kampa whats the end goal of this code?
i noticed i had acc + i instead of acc + 1, so are all you wanting to do is count the number of time 3 is in the array?
Alex Kampa
@alex-kampa
counting elements in an array that match a certain regex
at this stage just playing around with various ways to achieve that
George Dietrich
@Blacksmoke16
puts [1, 2, 3, 4, 5].count { |i| i.to_s.matches? /3/ }
or in this specific case puts [1, 2, 3, 4, 5].count 3
Alex Kampa
@alex-kampa
thanks, the ".matches?" looks good, short and idiomatic. I know, RTFD :-)
Thanks @Blacksmoke16
From IRC (bridge bot)
@FromIRC
<mfiano> Is there a way I can run ameba automatically when I "run" or "spec"?
George Dietrich
@Blacksmoke16
setup a Makefile
From IRC (bridge bot)
@FromIRC
<mfiano> Fair enough
George Dietrich
@Blacksmoke16
dont think youd want to run it every time you go to run the program tho
From IRC (bridge bot)
@FromIRC
<mfiano> Probably whenever I spec though
George Dietrich
@Blacksmoke16
yea
Jason Waldrip
@jwaldrip
alright, solved that one... next Q
how is is possible to call .from_json on an abstract class and have it resolve to one of its decendants?
George Dietrich
@Blacksmoke16
From IRC (bridge bot)
@FromIRC
<mfiano> Ah cool, no Makefile required
George Dietrich
@Blacksmoke16
crystal spec && ./bin/ameba?
From IRC (bridge bot)
@FromIRC
<mfiano> on save, vim-crystal seems to annotate the margin and with error icons, and when cursor is on one of those lines, message in status bar
George Dietrich
@Blacksmoke16
ah nice, i know sublime runs the formatter on save as wel, is super nice
From IRC (bridge bot)
@FromIRC
<mfiano> Yeah vim-crystal seems to run the formatter (optionally [disabled by default for some reason]), and ameba if available, though no mention of that or switch for it
From IRC (bridge bot)
@FromIRC
<mfiano> Day 1 actually getting the tooling set up and writing a small amount of code, and I must say, Crystal was easier to get comfortable with than most of the few dozen or so languages I've tried.
George Dietrich
@Blacksmoke16
:thumbsup:
From IRC (bridge bot)
@FromIRC
<mfiano> development_dependencies are included when not building with --release, right, or is there some other criteria that classifies what "development" means?
George Dietrich
@Blacksmoke16
they're dependencies not used in the final build of the code