Yes, absolutely, thanks so much! 

marți, 16 august 2016, 10:58:39 UTC+2, Mauro a scris:
>
> On Tue, 2016-08-16 at 10:29, Adrian Salceanu <[email protected] 
> <javascript:>> wrote: 
> > Oh, I see - I thought "global" meant "not explicitly enclosed in a 
> module". 
> > But then yes, I get your point since that's automatically included in 
> > "Main" which is just a module like any other. 
>
> Maybe have another read of 
> http://docs.julialang.org/en/release-0.4/manual/variables-and-scoping/ 
> which was overhauled half a year ago. 
>
> > marți, 16 august 2016, 10:18:57 UTC+2, Mauro a scris: 
> >> 
> >> On Tue, 2016-08-16 at 09:00, Adrian Salceanu <[email protected] 
> >> <javascript:>> wrote: 
> >> > Yichao, many thanks for taking so much time to help me through this, 
> >> that's 
> >> > very kind. 
> >> > 
> >> >> It has nothing to do with "compiling" a module. I'm just saying it's 
> >> not 
> >> > the right API. 
> >> > I understand your point now, it makes sense. 
> >> > 
> >> > 
> >> > would that still be in the global scope? 
> >> >> 
> >> > 
> >> >> Yes. 
> >> > Bummer! Then it appears that despite reading all the books on Julia 
> and 
> >> the 
> >> > docs a few times, I still don't have a good understanding of how 
> things 
> >> > should be approached. I expected that if I shove variables inside 
> >> modules 
> >> > and functions and sprinkle a good measure of type annotations and 
> >> "const" 
> >> > I'll be 80% good. 
> >> > 
> >> >> You can see what the expression object is with 
> >> > Yes, I was thinking about the same approach, thanks. 
> >> > 
> >> >> It's always global scope, if that's what you mean by OK. 
> >> > Yes, that's what I meant - and I was hoping it would not be. I still 
> >> don't 
> >> > get this: if in the middle of the parsing function I output 
> >> > "current_module()" and I get "Render", why is it global? 
> >> 
> >> Just checking: Are you aware that each module has its own global scope? 
> >> I.e. the top-level scope of each module is "global" (but separate from 
> >> the "global" scope of other modules). 
> >> 
> >> > Thanks 
> >> > Adrian, more confused about Julia than ever before 
> >> > 
> >> > 
> >> > marți, 16 august 2016, 01:19:14 UTC+2, Yichao Yu a scris: 
> >> >> 
> >> >> 
> >> >> 
> >> >> On Tue, Aug 16, 2016 at 4:37 AM, Adrian Salceanu <
> [email protected] 
> >> >> <javascript:>> wrote: 
> >> >> 
> >> >>> 
> >> >>> I was thinking about having the module itself defined in the 
> >> controller 
> >> >>> for example (or some other standalone .jl source file), completely 
> >> outside 
> >> >>> the templating engine itself, and then referencing the variables 
> >> defined 
> >> >>> within this module. Are you saying that in this case, the module 
> >> itself 
> >> >>> would not be compiled? 
> >> >>> 
> >> >> 
> >> >> 
> >> >> It has nothing to do with "compiling" a module. I'm just saying it's 
> >> not 
> >> >> the right API. A sane interface should allow the user to pass in 
> >> parameters 
> >> >> as arguments. Using a single module like this will also block any 
> kind 
> >> of 
> >> >> concurrency since calling the template with different parameters 
> will 
> >> >> either be impossible or have to modify globals. 
> >> >> 
> >> >> > In the module, and `include_string()` reference those globals. 
> >> >>> 
> >> >>> If I have 
> >> >>> 
> >> >>> module TplVars 
> >> >>>   const var1 = "foo" 
> >> >>>   const var2 = "bar" 
> >> >>>   const var3 = 42 
> >> >>> end 
> >> >>> 
> >> >>> and then from the template file I reference them 
> >> >>> 
> >> >>> ejl""" 
> >> >>> <html>... 
> >> >>>   <p> 
> >> >>>     $(TplVars.var1) 
> >> >>>   </p> 
> >> >>> </html> 
> >> >>> """ 
> >> >>> 
> >> >>> would that still be in the global scope? 
> >> >>> 
> >> >> 
> >> >> Yes. 
> >> >> 
> >> >> > How would I know that "lang" is the name of one of the vars, 
> without 
> >> >> rolling my own julia-like parser? 
> >> >> 
> >> >> (At template compilation time) Parse the expression using the julia 
> >> >> parser, iterate through the result object, check if the type of 
> >> expression 
> >> >> is supported and pull out the external references. 
> >> >> 
> >> >> You can see what the expression object is with 
> >> >> 
> >> >> ``` 
> >> >> julia> dump(:(lang == "en")) 
> >> >> Expr 
> >> >>   head: Symbol call 
> >> >>   args: Array{Any}((3,)) 
> >> >>     1: Symbol == 
> >> >>     2: Symbol lang 
> >> >>     3: String "en" 
> >> >>   typ: Any 
> >> >> ``` 
> >> >> 
> >> >> FWIW, what you want to implement is a julia-like parser anyway. 
> >> >> 
> >> >> > Right. So if I execute "eval()" and "include_string()" within a 
> >> module 
> >> >> other than Main (currently doing this into a dedicated Render 
> module) 
> >> would 
> >> >> that be ok? 
> >> >> 
> >> >> It's always global scope, if that's what you mean by OK. 
> >> >> 
> >> >> 
> >> 
>

Reply via email to