Hello,

do not try to use variables, that you have defined in one function within 
another function.

I would suggest the following approach, if you need to modify variables in 
multiple functions:

```
# if you need to modify multiple variables in multiple functions,
# define a data type that holds all your variables
type Data
    a::Number
    b::Number
    c::Number
end

# declaring data as const has the main meaning, that the type stays the 
same,
# you CAN change the values of the fields later
const data = Data(1,2,3)

# pass an instance of the type Data to your function
function test1(dat, x, y)
    dat.a*x + dat.b*y
end

# to a second function, pass the same variable
function test2(dat, x1, y1)
    # you can change the value of the fields in the function
    dat.a += 1
    dat.b *= 2
    dat.a^x1 + dat.b^y1
end

x = 1.0
y = 3.0

println(test1(data, x, y))
println(data.a, " ", data.b)

println()
println(test2(data, x, y))
println(data.a, " ", data.b)
```

If you want to define your function in different files, that put the type 
definition in a third file and include
this file in both files, that define your functions.

Performance wise it should not make much of a difference, if you define 
many functions in one file or in
different files.

Uwe

On Thursday, March 24, 2016 at 7:42:54 PM UTC+1, new to Julia wrote:
>
> Thank you very much for your reply. I am wondering that if I put two 
> functions in two files (same as Matlab did), does it slow the coding speed? 
> If not, how can I use variables already defined in one function? 
>
> On Thursday, March 24, 2016 at 1:34:08 PM UTC-5, Tim Holy wrote:
>>
>> We usually talk about calling "functions" rather than "files." If you're 
>> coming 
>> from a Matlab background, one thing to note about julia is that you can 
>> put 
>> multiple functions in one file: 
>>
>>     square_and_mult_by_c(x, c) = c*x*x 
>>
>>     smc(X::AbstractVector, c) = [square_and_mult_by_c(x, c) for x in X] 
>>
>> Note the second function calls the first, but you can put both of these 
>> in the 
>> same disk file. Once loaded, you can also call either of these functions 
>> from 
>> the command line. 
>>
>> Functions can have more than one argument, so you can pass both `x` and 
>> `c` 
>> from one function to another. You might also be interested in the manual 
>> sections on default and keyword arguments. 
>>
>> Best, 
>> --Tim 
>>
>> On Thursday, March 24, 2016 09:29:16 AM new to Julia wrote: 
>> > Got it. Thank you so much. I am wondering that what about variable? I 
>> may 
>> > need to define it in the function, right? How to make it be called by 
>> other 
>> > files? 
>> > 
>> > On Thursday, March 24, 2016 at 1:30:26 AM UTC-5, Uwe Fechner wrote: 
>> > > If c is a constant, that you want to define in the file test.jl, than 
>> you 
>> > > can define it e.g. at the top of the file 
>> > > OUTSIDE of the function like this: 
>> > > const c=2 
>> > > 
>> > > On Thursday, March 24, 2016 at 5:42:24 AM UTC+1, new to Julia wrote: 
>> > >> Thank you so much for your reply. I am still not very clear about 
>> what to 
>> > >> do. Could you explain to me again? 
>> > >> On Wednesday, March 23, 2016 at 2:48:40 PM UTC-5, Christopher 
>> Alexander 
>> > >> 
>> > >> wrote: 
>> > >>> No, you can call files using "include", but you are only going to 
>> > >>> import essentially the functions, types, and global variables 
>> defined in 
>> > >>> those files (you should not include a file inside of a function). 
>>  You 
>> > >>> do 
>> > >>> see though how your variable "c" in "test" would not be accessible 
>> > >>> anywhere 
>> > >>> else, right? 
>> > >>> 
>> > >>> Chris 
>> > >>> 
>> > >>> On Wednesday, March 23, 2016 at 3:39:10 PM UTC-4, new to Julia 
>> wrote: 
>> > >>>> Thanks for your reply. Does it mean that calling files in Julia is 
>> > >>>> impossible? 
>> > >>>> 
>> > >>>> On Wednesday, March 23, 2016 at 1:57:16 PM UTC-5, Christopher 
>> Alexander 
>> > >>>> 
>> > >>>> wrote: 
>> > >>>>> How is test2 supposed to know what "c" is?  It is only defined 
>> inside 
>> > >>>>> the scope of the function "test", so it won't be accessible 
>> anywhere 
>> > >>>>> else. 
>> > >>>>> 
>> > >>>>> Chris 
>> > >>>>> 
>> > >>>>> On Wednesday, March 23, 2016 at 2:41:29 PM UTC-4, new to Julia 
>> wrote: 
>> > >>>>>> I have a question for calling files in Julia: 
>> > >>>>>> 
>> > >>>>>> I have two jl files. And I can call one file from the other 
>> file. 
>> > >>>>>> However, the variable or constant defined in that file cannot be 
>> used 
>> > >>>>>> in 
>> > >>>>>> the other file. I am wondering that how to fix this? The 
>> following is 
>> > >>>>>> a 
>> > >>>>>> simple example. 
>> > >>>>>> 
>> > >>>>>> function test(x) 
>> > >>>>>> 
>> > >>>>>>   c=2; 
>> > >>>>>>   y1=6*x; 
>> > >>>>>>   y2=x/5; 
>> > >>>>>>   y1,y2 
>> > >>>>>> 
>> > >>>>>> end 
>> > >>>>>> pwd() 
>> > >>>>>> 
>> > >>>>>> 
>> > >>>>>> ## test and test2 are used for calling functions in Julia 
>> > >>>>>> function test2(x) 
>> > >>>>>> 
>> > >>>>>>   include("test.jl") 
>> > >>>>>>   yold,ynew=test(x/c); 
>> > >>>>>>   y3=yold+10; 
>> > >>>>>>   y4=ynew-10; 
>> > >>>>>>   yold2,ynew2=test(x) 
>> > >>>>>>   y5=yold2+20; 
>> > >>>>>>   y6=ynew2-20; 
>> > >>>>>>   y3,y4,y5,y6 
>> > >>>>>> 
>> > >>>>>> end 
>> > >>>>>> y3,y4,y5,y6=test2(100) 
>> > >>>>>> 
>> > >>>>>> 
>> > >>>>>> However, when I run this test2, there is a error comes out: 
>> saying 
>> > >>>>>> that c is not defined. 
>> > >>>>>> 
>> > >>>>>> Thank you very much. 
>>
>>

Reply via email to