Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 11:54
    straight-shoota opened #11359
  • 11:54
    straight-shoota labeled #11359
  • 11:54
    straight-shoota labeled #11359
  • 11:51
    straight-shoota edited #11358
  • 11:51
    straight-shoota labeled #11358
  • 11:47
    oprypin review_requested #11233
  • 11:46
    oprypin milestoned #11353
  • 11:46
    oprypin milestoned #11350
  • 11:46
    oprypin milestoned #11351
  • 11:45
    oprypin milestoned #11297
  • 11:45
    straight-shoota labeled #11358
  • 11:45
    straight-shoota labeled #11358
  • 11:45
    straight-shoota opened #11358
  • 11:04
    straight-shoota labeled #11356
  • 10:56
    straight-shoota labeled #11356
  • 10:56
    straight-shoota labeled #11356
  • 10:54
    straight-shoota edited #11357
  • 10:53
    straight-shoota labeled #11357
  • 10:53
    straight-shoota labeled #11357
  • 10:53
    straight-shoota opened #11357
mfiano
@mjfiano:matrix.org
[m]
  private def all_with_index?
    each_with_index { |e, i| return false unless yield e, i }
    true
  end

  def =~(other : self, rel_tol : Float64 = DEFAULT_TOLERANCE, abs_tol : Float64 = rel_tol)
    all_with_index? { |e, i| Origin.=~(e, other[i], rel_tol, abs_tol) }
  end
I'm still a little confused when working with blocks. This works, but how would this be rewritten to inline the functionality of all_with_index?, as this is the only usage of it and it doesn't deserve its own method?
George Dietrich
@Blacksmoke16
prob like
  def =~(other : self, rel_tol : Float64 = DEFAULT_TOLERANCE, abs_tol : Float64 = rel_tol)
    each_with_index { |e, i| return false unless Origin.=~(e, other[i], rel_tol, abs_tol) }
    true
  end
mfiano
@mjfiano:matrix.org
[m]
Oh I see now.
That clears up more than I care to admit
George Dietrich
@Blacksmoke16
:P
mfiano
@mjfiano:matrix.org
[m]
Hmm, if I mixin a module with a new method by using extend, I get "... is not expected to be invoked with a block, but a block was given". Works fine copy/pasting this new into every final type though. Ideas?
George Dietrich
@Blacksmoke16
Yes
mfiano
@mjfiano:matrix.org
[m]
Where can I find the list of available macro variables like @type, @def, and @top_level?
George Dietrich
@Blacksmoke16
by virtue of you adding another constructor the others are no longer invocable i think
mfiano
@mjfiano:matrix.org
[m]
Oh
George Dietrich
@Blacksmoke16
i think that's true, but don't quote me
mfiano
@mjfiano:matrix.org
[m]
Ok, about the macro variable list, does one exist? I tried searching and only see those 3 mentioned in passing in the reference docs
George Dietrich
@Blacksmoke16
those are the only 3
mfiano
@mjfiano:matrix.org
[m]
Nothing in the api docs from what i see either
Aha!
Thank you. I'm trying to figure out how I can get at the inner right-most type string name of a module path gotten with @type.
Oh that was a mouthful. It's getting late
George Dietrich
@Blacksmoke16
@type.name.split("::").last
mfiano
@mjfiano:matrix.org
[m]
Ok so string manip it is
George Dietrich
@Blacksmoke16
ye
i always wondered what the .identify method is for on StringLiteral
Foo::Bar.name.stringify.identify # => "Foo__Bar" :thinking:
mfiano
@mjfiano:matrix.org
[m]
wonder if I can rely on the order of #instance_vars being how they are defined...
George Dietrich
@Blacksmoke16
crystal-lang/crystal#147 wew, apparently this is why :P
probably
dunno if it'll help your use case but you can pass numbers as generic args
mfiano
@mjfiano:matrix.org
[m]
Ok last question before I pass out? How do I newline split up long io << foo << bar << baz << ... chains so the parser is happy? :)
George Dietrich
@Blacksmoke16
io << foo << bar << baz
io << one << two << three
...
really could have each << on its own line as well
:shrug:
mfiano
@mjfiano:matrix.org
[m]
ah makes sense. Thanks a lot, night!
mfiano
@mjfiano:matrix.org
[m]
Going to have to figure out how to get the name of an ivar tomorrow...
George Dietrich
@Blacksmoke16
if you're iterating over @type.instnace_vars its just .name
mfiano
@mjfiano:matrix.org
[m]
in a {% for ivar in @type.instance_vars %} ... {% end %} I tried something like io << {{ivar.name}} << " " << {{ivar}} and got the value duplicated instead of the name, which makes me believe its a quoting issue, but I'm afk so I'll try any suggestions tomorrow.
George Dietrich
@Blacksmoke16
might need ivar.name.stringify
otherwise it'll prob invoke the getter instead of the name
mfiano
@mjfiano:matrix.org
[m]

I woke up today with a couple questions:

1) Why isn't #[]= included in indexable? Do I always have to implement this if it is always the same (apart from assigning) as #unsafe_fetch?

2) If I have a struct with an array as its only ivar, is there a more convenient way to make the struct Indexable besides defining #unsafe_fetch that just forwards to the array's version? I'm not really familiar with delegates but thinking they are the key here.

mfiano
@mjfiano:matrix.org
[m]
I see how delegate is used now, and it is the answer to #2. New question: Is there a technical reason why the #[]= methods with Range parameters from Array are not included for StaticArray (or a Slice of one)? I'm sad I can't assign into subranges of a homogeneous array.
oprypin
@oprypin:matrix.org
[m]
mfiano: indexable is about ability to read by index. ability to write by index wasn't seen as common enough and big enough to implement a generic module for
mfiano
@mjfiano:matrix.org
[m]
Fair enough. Any reasoning for only being able to write a single index with StaticArray?
oprypin
@oprypin:matrix.org
[m]
mfiano: ability to assign to a range is very powerful and includes resizing of the array.
staticarray can't be resized so there would be too many cases where the only way out would be too raise a runtime exception in the general case
mfiano
@mjfiano:matrix.org
[m]
That is true. If it's doing bounds checking already though, it can be implemented for SA to not dynamic grow the heap memory (since it's not heap memory)
It is looking like my types are going to be structs wrapping a regular dynamic Array then
I might pay for allocation/fragmentation with lots of objects, so not sure yet though
Emilia
@rymiel:rymiel.space
[m]
Regarding the discussion in crystal#10976 is the cause behind the invalid memory access of some actions unknown? Do these segmentation faults happen in practice or is the CI just overwhelmed? Sad to see everything with a red cross :(
FlowerBrackets - code here
@BracketsFlower_twitter
Hey you can refer this resource on System arraycopy() method in java - https://www.flowerbrackets.com/system-arraycopy-method-java/
mfiano
@mjfiano:matrix.org
[m]
Where is the macro control flow and other keywords listed in the docs, such as {% for ... %}