# using constructor to compute new field

**URL:** https://discourse.julialang.org/t/using-constructor-to-compute-new-field/8394
**Category:** New to Julia
**Created:** [January 16, 2018, 4:23am UTC](https://discourse.julialang.org/t/using-constructor-to-compute-new-field/8394 "2018-01-16T04:23:04Z")
**Posts on this page:** 1
**Showing post:** 2

<div class="post-metadata">

### Author: ![favba](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/favba/32/2735_2.png) [@favba](https://discourse.julialang.org/u/favba)
#### Post date: [January 16, 2018, 4:38am UTC](https://discourse.julialang.org/t/using-constructor-to-compute-new-field/8394/2 "2018-01-16T04:38:46Z")

</div>

“😛” is not a valid type definition 😄 .

Joking aside… This works:

```julia
julia> immutable Ray{P<:Point, T<:AbstractFloat}
       v1::P
       v2::P
       dx::T
       dy::T
       dz::T
       function Ray(v1::P, v2::P) where {T,P<:Point{T}}
           dx = v2.x - v1.x
           dy = v2.y - v1.y
           dz = v2.z - v1.z
           dx2 = dx * dx
           dy2 = dy * dy
           dz2 = dz * dz
           s = dx2 + dy2 + dz2
           l = sqrt(s)
           dx = dx / l
           dy = dy / l
           dz = dz / l
           new{P, T}(v1, v2, dx, dy, dz)
       end
       end
julia> p1 = Point(1.0, 2.0, 3.3)
Point{Float64}(1.0, 2.0, 3.3)

julia> p2 = Point(4.0, 3.0, 5.5)
Point{Float64}(4.0, 3.0, 5.5)

julia> r = Ray(p1, p2)
Ray{Point{Float64},Float64}(Point{Float64}(1.0, 2.0, 3.3), Point{Float64}(4.0, 3.0, 5.5), 0.7787611974767475, 0.2595870658255825, 0.5710915448162815)

```

Also, here is a [post](https://discourse.julialang.org/t/psa-how-to-quote-code-with-backticks/7530) explaining how to properly quote your codes here at discourse forum

---

_[View the full topic](https://discourse.julialang.org/t/using-constructor-to-compute-new-field/8394)._
