Hi Julia,
The simplest way to do this is to make Foo a type and define its type
constructor to behave as you wish.
type Foo
n::Float64
end
function Foo(n::Float64)
record = createRecordForFooDB(n)
saveRecordInFooDB(record)
println("saved Foo($(n)) to DB")
end
On Sunday, January 3, 2016 at 10:49:12 PM UTC-5, Julia Tylors wrote:
>
> Hi, my end goal is whenever a constructor call is made, I want to detect
> it and keep track of it by creating an object
>
> For example
> f = Foo(12)
> I want to detect this and create a record and save it to a db.
>
> Thanks
>
> On Sunday, January 3, 2016 at 6:58:49 PM UTC-8, Isaiah wrote:
>>
>> There is no AST-level distinction between a "constructor call" and a
>> "normal function call", see [1]. Look at the code in 'reflection.jl' to see
>> how to determine the applicable method for a given name (which may be a
>> constructor). If that doesn't help, it would be helpful to clarify the goal.
>>
>> For return statements, use `expand(a)` to convert the expression to goto
>> form, which should contain only explicit returns.
>>
>> [1] https://github.com/JuliaLang/julia/pull/8712
>>
>> On Sun, Jan 3, 2016 at 6:52 PM, Julia Tylors <[email protected]> wrote:
>>
>>> I am planning to detect the constructor calls and return statement of a
>>> function
>>>
>>>
>>> a = quote begin
>>> x = Foo(12)
>>> y = 5 + 6
>>> f(x.val,y)
>>> x.val * y
>>> end
>>>
>>> a is an Expr, in this expression , I would like to detect the
>>> constructor calls (Foo(12)( and distinguish them from normal function
>>> calls(fx.val,y).
>>> and i also want to identify the return statement, (x.val*y). How can i
>>> do it programmatically?
>>>
>>> Thanks
>>>
>>>
>>>
>>
>>