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.
>>
>>