GithubHelp home page GithubHelp logo

Comments (3)

cormullion avatar cormullion commented on May 18, 2024 1

Hi there! I really appreciate your input about how this currently works - perhaps the design can be improved. (Surely it can!)

I’ve noticed the problem before (and it relates to the general theme about avoiding global variables in Julia code for performance reasons). You need to worry only about the initial despatch of the function specified in Scene, though:

using Luxor

function drawframe(scene, framenumber, array)
    sethue("cyan")
    fontsize(200)
    text(string(array[framenumber]))
end

function main()
    bigarray=collect(rand(1:6, 1000))
    m = Movie(400, 400, "test", 1:100)
    animate(m, [
        Scene(m, (s, f) -> drawframe(s, f, bigarray)) # <————
        ], 
        pathname="/tmp/example.gif", 
        creategif=true)
end

main()

Another technique I use to pass information around is to define a frame function that accepts keyword arguments, as well as the two obligatory arguments:

function frame(scene, framenumber; k = 1)
    ....

Then you call the frame functions like this:

animate(heartlines, [
    Scene(heartlines, backdrop, 1:700),
    Scene(heartlines, (s, f) -> frame(s, f, k = 10),  1:50),
    Scene(heartlines, (s, f) -> frame(s, f, k = 9), 51:100),
...

from luxor.jl.

cormullion avatar cormullion commented on May 18, 2024 1

This is using an anonymous function that takes two arguments which is defined to simply call another one that takes 3, thus splicing another argument in. What’s being passed is a function definition (I think).

This

(s, f) -> drawframe(s, f, bigarray)

is a function.

The problem being solved here is that you’re passing your new user-defined functions to an previously-defined and compiled function in Luxor that was written expecting any future functions to have two predictable arguments.

I’ll have to read the section in the manual about scope and global variables again... I didn’t quite get it last time. ;)

from luxor.jl.

mantzaris avatar mantzaris commented on May 18, 2024

What is the solution to having global variables? Can a formation of a module or struct work?

This code you wrote (s, f) -> drawframe(s, f, bigarray)) ,...looks interesting. Could you explain how this is working? Is it a use of 'dispatch' of a function to the correct most applicable method?

from luxor.jl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.