Julia: рдУрд╡рд░ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЬрдире░ 2013  ┬╖  249рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JuliaLang/julia

рдпрд╣рд╛рдБ рд▓рд╛рдпрд╛ рдЧрдпрд╛: https://github.com/JuliaLang/julia/issues/1263

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣рд╛рдБ рдЗрд╕ рдХрд╛ рдПрдХ рдордЬреЗрджрд╛рд░ 3-рд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

diff --git a/base/boot.jl b/base/boot.jl
index cd3ae8b..a58bb7e 100644
--- a/base/boot.jl
+++ b/base/boot.jl
@@ -266,6 +266,9 @@ Void() = nothing

 (::Type{Tuple{}})() = ()

+struct Field{name} end
+(::Field{f})(x) where {f} = getfield(x, f)
+
 struct VecElement{T}
     value::T
     VecElement{T}(value::T) where {T} = new(value) # disable converting constructor in Core
diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm
index b4cb4b5..59c9762 100644
--- a/src/julia-syntax.scm
+++ b/src/julia-syntax.scm
@@ -1685,7 +1685,7 @@
     (if (and (pair? e) (eq? (car e) '|.|))
         (let ((f (cadr e)) (x (caddr e)))
           (if (or (eq? (car x) 'quote) (eq? (car x) 'inert) (eq? (car x) '$))
-              `(call (core getfield) ,f ,x)
+              `(call (new (call (core apply_type) (core Field) ,x)) ,f)
               (make-fuse f (cdr x))))
         (if (and (pair? e) (eq? (car e) 'call) (dotop? (cadr e)))
             (make-fuse (undotop (cadr e)) (cddr e))

рдореЗрд░реА рд╕реЛрдЪ рд╣реИ рдХрд┐ рд╣реИ a.b рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕рдорд╛рд░реЛрд╣ рдмреБрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП Field{:b}() рдХреЗ рдмрдЬрд╛рдп getfield , рддрд╛рдХрд┐ рдЖрдк рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдорд┐рд▓ x->x.a рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реАред рдпрд╣ рднреА getfield рдХреЛ рд╣рдореЗрд╢рд╛ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдорддрд▓рдм рджреЗрддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ (sysimg + 5%, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рдХреА рддрд░рд╣ рд╣реИ) рдкрд░ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╡рд╛рд▓реЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдХреБрдЫ рд╢реБрд░реБрдЖрддреА рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реЛрдЧрд╛ред

рд╕рднреА 249 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореНрдпреВрдЯреЗрдЯрд░ / рдПрдХреНрд╕реЗрд╕рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЙрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рдЙрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рд░рд╛рд╣рд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдк рдПрдкреАрдЖрдИ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдореВрд░реНрддрддрд╛рдУрдВ рдореЗрдВ рдмрджрд▓ рд╕рдХреЗрдВред

+1

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдмрдврд╝рд┐рдпрд╛ рддрд░реАрдХрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЯреЙрдо рд╢реЙрд░реНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛рдлреНрд░реИрдо рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╕рдВрджреЗрд╣ рдХрд░рддрд╛ рд╣реВрдВред

рдпрд╣ рдЕрдЬрдЧрд░ рдХреЛрдб (PyCall рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ рдмреБрд▓рд╛ рдХрд░ рдХреЗ рдмрд╛рдж рд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рд╣реЛрдЧрд╛ a[:b] рдХреЗ рдмрдЬрд╛рдп a.b ред

@JeffBezanson , 0.3 рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдореМрдХрд╛? рдЕрдВрддрд░-рднрд╛рд╖рд╛ рдЗрдВрдЯрд░реЛрдк рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рджреЛрдиреЛрдВ PyCall рдХреЗ рд▓рд┐рдП рдФрд░ JavaCall (cc @aviks) рдХреЗ рд▓рд┐рдПред

@JeffBezanson рдЕрдЧрд░ _not_, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рджрд┐рд╢рд╛ рджреЗ рд╕рдХреЗрдВ? ( I have an absolutely awesome way to implement this. )

рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдЬреЗрдлрд╝ рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рддреЗрдЬрд╝ рдФрд░ рди рд╣реА рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЗрд╕рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░реЗ рдХрд┐ рд╡рд╣ ;-);

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ

getfield(x::MyType, ::Field{:name}) = ...

рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкреНрд░рддрд┐ рдХреНрд╖реЗрддреНрд░ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рдкрд╛рд░рджрд░реНрд╢реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд рдХрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде getfield(::MyType, ::Symbol) рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ . рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ getfield рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ _earlier_ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ . рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реНрд▓реЗрд╖рдг (# рдкреНрд░рдХрд╛рд░) * (# рдлрд╝реАрд▓реНрдб) рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╕рдВрдХрд▓рдХ рджрдХреНрд╖рддрд╛ рдЪрд┐рдВрддрд╛ рдХрд╛ рдПрдХ рд╕рд╛ рднреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдмрд╕ рд╡рд╣реА рджреЗрдЦреЗрдВрдЧреЗ рдЬреЛ рд╣реЛрддрд╛ рд╣реИред

@JeffBezanson рдХреНрдпрд╛ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдореЗрдВ const рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ? рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдХреНрд╖реЗрддреНрд░ рд▓реБрдХрдЕрдк рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░рдВрддрд░ рд╣реЛрдиреЗ рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред (рдПрдХ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рдЕрд╕рдлрд▓ jl_get_global "рдЯреНрд░реИрдк" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ рдорд╛рдВрдЧ рдкрд░ рдирдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдЧрд╛)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ # 5395 рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╛рд░реЛрд╣ рдпрд╛ рд╡рд┐рдзрд┐ MyMod.newfunction(new signature) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдФрд░ рдорд╛рдВрдЧ рдкрд░ рдПрдХ (рд╕рдВрднрд╡рддрдГ рдмрдбрд╝реЗ) рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛред рдЗрд╕рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдмрд╛рдБрдз рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреВрд▓рд┐рдпрд╛ рдиреМрд╕рд┐рдЦрд┐рдпрд╛, рдереЛрдбрд╝рд╛ рдЪрд┐рдВрддрд╛ рдкреЗрд╢ рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ "рд╢реБрджреНрдзрддрд╛" рдХрд┐рд╕реА рддрд░рд╣ рдЦреЛ рдЧрдИ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдо рддреМрд░ рдкрд░ рдЬреНрдЮрд╛рди рдЦреЛ рджреЗрдЧрд╛ рдЕрдЧрд░ рдПрдм рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджрд░реНрдн / рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ рдпрд╛ рдпрджрд┐ рдХреЛрдИ рдмрдбрд╝реА рдлрд╝рдВрдХреНрд╢рди рдорд╢реАрдирд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдкреАрдЫреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдмреБрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рднрд╛рд╡рдирд╛ рд╣реИ ...

рджреВрд╕рд░реА рдУрд░, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрдИ рдорд╛рдорд▓реЛрдВ (PyCall, Dataframes ...) рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╢реБрдЧрд░ рдХреА рдПрдХ рдмрдбрд╝реА рдЗрдЪреНрдЫрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдпрд╣ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣реИ .. # 2614?

рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдкрд╡рд┐рддреНрд░рддрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ, рднрд▓реЗ рд╣реА рдХреЛрдИ names(Foo) рдХрд░рдХреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХреЗ рдХрд┐ Foo рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШрдЯрдХ рдХреНрдпрд╛ рд╣реИрдВред

рдкрд╡рд┐рддреНрд░рддрд╛ рдХрд╛ рддрд░реНрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЪрд┐рдВрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдХрд┐ рдХреИрд╕реЗ рдирд╛рдо рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдЙрди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред DataFrames рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ columns рдФрд░ colindex рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреА рдпреЛрдЬрдирд╛ рдХреНрдпрд╛ рдереАред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getfield(x::MyType, ::Field{:foo}) = ... рдХреЛ рддрдм рдордирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм MyType рдкрд╛рд╕ рдПрдХ рдлрд╝реАрд▓реНрдб foo , рдЕрдиреНрдпрдерд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝реАрд▓реНрдб рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛ рдЬрд╛рдПрдЧреА (рдпрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ) рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛)ред
рд▓реЗрдХрд┐рди рддрдм getfield рдХреЛ рдХреЗрд╡рд▓ рдареЛрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдореВрд░реНрдд рд▓реЛрдЧ рдЦреЗрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред

(рдЗрд╕ рдмреАрдЪ, рдореИрдВ рд╕реА ++ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред)

рдпрд╣ рдХреЛрдИ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Core.getfield(x, :f) рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж рдореИрдВ рдмреЗрдЪ рд░рд╣рд╛ рд╣реВрдБред рд▓реЗрдХрд┐рди рддрдм Core.getfield(x, :f) (рдЬреИрд╕реЗ, x..f ) рдХрд╛ рд╢реЙрд░реНрдЯрдХрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд▓рд┐рдП . рдЕрдзрд┐рдХ рд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб (рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо, рд╕рдВрднрд╡рддрдГ рд╢рдмреНрджрдХреЛрд╢реЛрдВ) Core.getfield s рдХреЗ рд╕рд╛рде рднреАрдбрд╝ рд╣реЛред

рдореИрдВ рдкрд╡рд┐рддреНрд░рддрд╛ рдХреЗ рдкрд╣рд▓реВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реВрдВ - рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ, рдПрдХрдорд╛рддреНрд░ рдХреЛрдб
рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ
рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдЬрдм рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рддреЛ рдЖрдк
рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╢реЙрд░реНрдЯрдХрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рд╡реЗ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реЛрдВ
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА # 4935 рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЗрд╕реЗ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдЦреАрдВрдЪ рд▓реЗрдВ: рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╢рд╛рд╕реНрддреНрд░реАрдп рдЬреВрд▓рд┐рдпрди рдорд▓реНрдЯреАрдкрд▓ рдбрд┐рд╕реНрдкреИрдЪ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдУрд╡рд░рд▓реИрдк рдХрд░ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

getfield (x :: MyType, :: Field {: size}) = .........
i = 1 рдХреЗ рд▓рд┐рдП: y.size .....

рдХреЗ рдмрдЬрд╛рдп

рдЖрдХрд╛рд░ (x :: MyType) = ..........
i = 1 рдХреЗ рд▓рд┐рдП: рдЖрдХрд╛рд░ (y) ...ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдбреЗрдЯрд╛рдлреНрд░реЗрдо, рдбрд╛рдпрдЯреНрд╕, рдкреНрдпреЛрдмреНрдЬреЗрдХреНрдЯреНрд╕), рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдг (рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ) рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХреНрд╕реЗрд╕рд┐рдВрдЧ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ _setting_ рдлрд╝реАрд▓реНрдб рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдЕрд╕рдВрдЧрдд рдФрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рдЕрднреА рддрдХ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВ?

@nalimilan, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдПрдХ setfield! рдХреЗ рдЕрд▓рд╛рд╡рд╛ getfield ред ( setindex! рдмрдирд╛рдо getindex [] )ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИред

@Stevengj рд╕реЗ рд╕рд╣рдордд: DataFrames рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП setfield! рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ (рдЬреИрд╕реЗ C # рдФрд░ рдкрд╛рдпрдерди) рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рд╣реИред рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рддрд┐рдЧрдорди рдХреА рдЪрд┐рдВрддрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХрд╛ _inlineability_ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рднреВрдорд┐ рдХреЗ рдмрд╛рдж f(x) = g(x.a) + h(x.b) рдЬреИрд╕рд╛ рдХреБрдЫ рдЕрдЪрд╛рдирдХ рдЕрдкреНрд░рд╛рдкреНрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкрддреНрддрд┐ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

# let A be a type, and foo a property name
<strong i="10">@property</strong> (a::A).foo = begin
    # compute the return the property value
end

# for simpler cases, this can be simplified to
<strong i="11">@property</strong> (a::A).foo2 = (2 * a.foo)

# set property 
<strong i="12">@setproperty</strong> (a::A).foo v::V begin
    # codes for setting value v to a property a.foo
end

рджреГрд╢реНрдп рдХреЗ рдкреАрдЫреЗ, рдЗрди рд╕рднреА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ <strong i="5">@property</strong> (a::A).foo = рдпрд╣ рд╕рдм getproperty(a::A, ::Field{foo}) = рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ ...

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреЗрд╣рддрд░ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реА рднреВрдорд┐ рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдирд┐рд░реНрдгрдп рд╕реЗ рдкрд╣рд▓реЗ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдЗрдирдмрд┐рд▓реНрдб рди рд╣реЛ рдЬрд╛рдП рдХрд┐ рдХреНрдпрд╛ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдлрдВрдХреНрд╢рди рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рддрдм рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрд╕рд░ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рд╡рд╣ рдХреНрд░рдо рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИ?

getproperty(a::A, ::Field{:foo}) = рдореБрдЭ рдкрд░ рд╣рдорд▓рд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрд▓реЛрди рд╣реИрдВ :-) рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдореВрд▓реА рдмрд╛рдд рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЕрднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рддрд┐рдЧрдорди рд╣реЛрдЧрд╛ред рдореИрдВ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рдкреАрдврд╝реА рддрдВрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВред @JeffBezanson рд╢рд╛рдпрдж рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣реЗ?

рдлрд╝реАрд▓реНрдб рдкрд╣реБрдВрдЪ рдмрд╣реБрдд рдирд┐рдореНрди-рд╕реНрддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

рдЖрдЦрд┐рд░рдХрд╛рд░ рдореИрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдлреАрд▓реНрдб рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде, рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╣рдореЗрд╢рд╛ рджреЛ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ: x.property = value рдФрд░ property!(x, value) ред рдпрджрд┐ рдлрд╝реАрд▓реНрдб рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреБрд▓ рдЧрдбрд╝рдмрдбрд╝реА рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдордЬрдмреВрдд рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд▓реЗрдЦрдХ рдиреЗ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЪреБрдирд╛ рд╣реИред

рдФрд░ рдлрд┐рд░ рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрд╖реЗрддреНрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВ рдпрд╛ рдирд┐рдЬреА рд╣реИрдВред рдлреАрд▓реНрдб рдХреЛ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рд╕реЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА: рдлрд╝реАрд▓реНрдб рд╣рдореЗрд╢рд╛ рдирд┐рдЬреА рд╣реЛрдЧреАред рддрд░реАрдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдВрдЧреЗ, рдФрд░ рдкреНрд░рдХрд╛рд░ рд╡реЗ рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рд╡реЗ рдЗрдВрдЯрд░рдлреЗрд╕ / рдкреНрд░реЛрдЯреЛрдХреЙрд▓ / рд▓рдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╡реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ @stevengj рдХреА https://github.com/JuliaLang/julia/issues/1974#issuecomment -12083268 рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдПрдкреАрдЖрдИ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрддреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реЛрдВ, рдФрд░ рдХрднреА рднреА рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ ред

рдПрдХрдорд╛рддреНрд░ рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдкрдЫрддрд╛рд╡рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ DataFrames , рдХреНрдпреЛрдВрдХрд┐ df[:a] df.a рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдХреЗрд▓реЗ рд╣реА рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ PyCall рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ, рдЧреИрд░-рдЬреВрд▓рд┐рдпрди рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рдХреИрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдП? рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЫрд┐рдкрд╛рдПрдВ?

@nalimilan , рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд░реАрдпрддрд╛ x.property рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ .. рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ: рдирд┐рдЬреА _real_ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЪреАрдЬреЛрдВ рдХреЛ рдХрдо рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рд╡рд░реНрддрдорд╛рди рдореЗрдВ step(r) r.step рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдШреГрдгрд┐рдд рдорд┐рд╢реНрд░рдг рдЕрднреА рд╣реИред рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдореИрдВрдиреЗ FloatRange рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ рдпрд╣ рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ step(r) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╕рд╣реА рд╣реИред рдорд┐рд╢реНрд░рдг рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ - рд▓реЗрдХрд┐рди рд╡реЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓ рдЧрдП рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд┐рдиреНрди рд╣реИрдВред рдпрд╣ рдмреЗрд╣рддрд░ рд╢реИрд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рд░ рдкрд╣реБрдБрдЪ рдХрд╛ рдерд╛ step(r) рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╢реИрд▓реА step(r) рд╣реАред рд▓реЗрдХрд┐рди рдЙрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреБрдЫ рдордиреЛрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВред рдпрджрд┐ рд╣рдо r.step рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ r..step рд▓рд┐рдП рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓реЛрдЧ рдмрд╕ рд╡рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реИрдВред

рд╢реИрддрд╛рди рдХреЗ рд╡рдХреАрд▓ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдХреНрдпрд╛ рд╣рдореЗрдВ) r.length рдпрд╛ length(r) рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрд╕рдВрдЧрддрддрд╛ рдПрдХ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдкрд╛рдЗрдерди рдХреЛ рдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд░реВрдмреА рдиреЗ r.length рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ред

+1 .. Core.getfield !

@StefanKarpinski рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; length рдХрд╛ рдорд╛рдорд▓рд╛ рдПрдХ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ size , рдЬреЛ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдЖрдпрд╛рдо рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдлреИрд╕рд▓реЗ рдиреЗ рдХреАрдбрд╝рд╛ рдЦреЛрд▓ рджрд┐рдпрд╛ ...

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП .. рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП . , рд╡реЗ рддрд░реАрдХреЗ рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд╣реИрдВред

рд╢реИрддрд╛рди рдХреЗ рд╡рдХреАрд▓ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдХреНрдпрд╛ рд╣рдореЗрдВ) r.length рдпрд╛ length(r) рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрд╕рдВрдЧрддрддрд╛ рдПрдХ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдкрд╛рдЗрдерди рдХреЛ рдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд░реВрдмреА рдиреЗ r.length рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ рдЬреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдЙрдЪреНрдЪ рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрд╛рдиреА f f(x) рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдк рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдкрд░ map рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ f x.f рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рд▓реЗрдЦрди рдХреА рдХрдореА) x -> x.f ) - рдЬреЛ рдПрдХрд▓-рдкреНрд░реЗрд╖рдг рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИред

рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдкрд░ рд░реЛрдХ рдХреНрдпреЛрдВ? x.foo(args...) getfield(x::MyType, ::Field{:foo}, args...) = ... рдмрд░рд╛рдмрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рддрдм рд╣рдо рдкрд╣рд▓реЗ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде x.size(1) рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддреЗ рдереЗред (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкрдХреНрд╖рдзрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛ рд╢рд╛рдпрдж рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рд╕рд┐рд░реНрдл OO рд▓реБрдХ-рдПрдХ рдЬреИрд╕реЗ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ?)

рдпрд╣ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдХреМрди рд╕реА рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд╡рд┐рд░рд╛рдо рджреЗрддреА рд╣реИрдВред рдореБрдЭреЗ рдЙрд╕ рддрд░рд╣ рдХреЗ oo рд╕реНрдЯрд╛рдЗрд▓ рдХреЛрдб рдХреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдпрд╣ рдХрд╛рдлреА рд╕реБрдЦрдж рд╣реИ рдФрд░ рд▓реЛрдЧ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ _really_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдордЬрдмреВрдд рдиреАрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЪреВрдБрдХрд┐ рдЖрдк рдЬреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдЖрдк рдмрд╣реБрдд рдореБрдХреНрдд рд╣реЛрдВрдЧреЗред

рдЬрдм рдореИрдВрдиреЗ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдиреЛ-рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдиреЗ рдореБрдЭреЗ рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдУрдУ-рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХреЛ рдЬрд╛рдиреЗ рджреЗрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХреАред рддреЛ рдЕрдХреЗрд▓реЗ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рдмреБрд░рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░рд▓ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд▓рд┐рдП (рдпрд╛рдиреА рд╕рд┐рд░реНрдл a.b sans (args...) ), рдореИрдВ @nalimilan рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдКрдкрд░ рд╕рд╣рдордд рд╣реВрдВред рдЕрдВрдХ # рек реп рейрел рдореЗрдВ рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЦреЗрддреЛрдВ рдХреЛ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП; рдлрд▓рд╕реНрд╡рд░реВрдк рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред . -рд╡рд░ рд▓реЛрдбрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдЧрд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп-рдлрд╝реАрд▓реНрдб API рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрднрд╡рддрдГ рдлрд╝реАрд▓реНрдб рдХреЛ API рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╣рд╛рдБ, . рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ ...

рдХреИрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдПрдХрд▓ . _only_ getfield(x::MyType, ::Field{:name}) = ... рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ .. (рдпрд╛рдиреА рдХреНрдпрд╛ . рдЕрдм рд╣реИ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ _only_ рд╣реИред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рднреЗрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

  • . рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░-рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдореВрд▓реНрдп-рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ
  • .. рдХреНрд╖реЗрддреНрд░ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред

рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣реА рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ . рдбрд┐рдлреЙрд▓реНрдЯ рд╕реЗ рд▓реЗрдХрд░ .. рддрд╛рдХрд┐ рдпрд╣ рдЯреВрдЯ рди рдЬрд╛рдПред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП!

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ . .. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдПрдХ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ .. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдХреЛрдб рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ . рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИред рд╣рдо a.b рдбрд┐рдлрд╝реЙрд▓реНрдЯ a..b рдПрдХ рдЕрд╡рдореВрд▓реНрдпрди рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдЙрд╕ рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╢реИрд▓реА рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛

a = [1:10]
a.length()
a.size()

рд╕реЗ

a.length
a.size

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ (рдКрдкрд░ "рд╢реБрджреНрдзрддрд╛" рдЪрд┐рдВрддрд╛ рдХреЗ рдкреАрдЫреЗ)ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╢реИрд▓реА рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рддреЛ рдЪреАрдЬреЗрдВ рдЙрддрдиреА рдЧрдиреНрджреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рддрдиреА рдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ

a.length()

рддрдм рд╕реЗ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдлрд╝реАрд▓реНрдб рдерд╛ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ . рдХрднреА рднреА рдЦреЗрддреЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдореБрдЭреЗ рднреНрд░рдорд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ a.length() рдпрд╛ a.length рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ? рдХреНрдпрд╛ r.step r.length рд╕реЗ рдЕрд▓рдЧ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЕрд▓рдЧ рд╣реИ? рдпрджрд┐ рд╡реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдореЗрдВ step(r) рдФрд░ length(r) рдпрд╛ r.step рдФрд░ r.length ?

рд╕реНрдЯреАрдлрди рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ . рд╣рдореЗрд╢рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╣реИ (рдЬреИрд╕реЗ + рднреА), рдЬрдмрдХрд┐ .. рд╣рдореЗрд╢рд╛ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реИ рдкрд╣реБрдВрдЪред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд┐ рдХреНрдпрд╛ a.length , рдЖрджрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ: рдХреИрд╕реЗ . рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдореЛрдмреЗрд╢ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ ред рдЬрдмрдХрд┐ рд╣рдо рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ size , length , step рдЖрджрд┐ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, a.size(1) рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЦрд░рд╛рдм рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗ рд░рд╣рд╛ рд╣реИ:

  • рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ / рд╡рд░реНрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЧреЗрдЯрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд╕рдиреЗ рд╡рд╛рд▓рд╛ рднреА рд╣реИ рдФрд░ a.property() = ... рдЬреИрд╕рд╛ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред
  • рдпрджреНрдпрдкрд┐ рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд╕рдВрдж рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ API рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд╝реАрд▓реНрдб рдирд┐рдЬреА рд╣реЛрддреЗ рд╣реИрдВ, рдореИрдВ рд╕реНрдЯреАрдлрд╝рдиреНрд╕ рдХреА рд░рд╛рдп рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд╕рд░рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦреЗрдВред a.length рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, a.size(1) рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  • рдХреГрдкрдпрд╛ . рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ .. ред рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдПрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдП рд░рдЦреЗрдВ

рдХреГрдкрдпрд╛ . рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ .. ред рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдПрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдП рд░рдЦреЗрдВ

рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рд┐рд░реНрдл a.property = b , a.property() = b ред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ a.property() рдЕрдЪреНрдЫрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ

рдпрд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ: рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдкреНрд░рдХрд╛рд░ / рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЧреЗрдЯрд░реНрд╕ / рд░рд╛рдЗрдЯрд░реНрд╕ рдХреЛ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдФрд░ рдбреЗрдЯрд╛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ (рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдерд┐рд░ рд░рдЦреЗрдВ рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓реЗрдВ)

рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рднрд╡рд┐рд╖реНрдп рдХреА рдЕрд╕рдВрдЧрддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд░реВрдмреА рдХреЛ dsl рдХреА рддрд░рд╣ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ ...

amt = 1.dollar + 2.dollars + 3.dollars.20.cents 

рд▓реЗрдХрд┐рди рдкрд╛рдЧрд▓реЛрдВ рдХреА рддрд░рд╣ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реЗрдВ:

object.propert1.property2.property3 ....

рдмрд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

  • рдореИрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде Dicts рдХреЗ рд▓рд┐рдП . рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред d.key рддрдм d[:key] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╕рд┐рд░реНрдл рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ a->property a..property рд╕реЗ рдмреЗрд╣рддрд░ рдкрдврд╝рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдпрд╣ рдЙрддрдирд╛ рдмрдбрд╝рд╛ рд╕реМрджрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрд╛ рдирд╣реАрдВред

@ рдпрд╛рдХреВрдмрдкрд╛рд░реНрдЯрдореИрди рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВред рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╡рд╕реНрддреБ рд╣реИ, рдХрдВрдЯреЗрдирд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ obj [рд╕реВрдЪрдХрд╛рдВрдХ] рдпрд╛ obj [рдХреБрдВрдЬреА] рд╣реИред рдЕрднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, PyCall рдФрд░ OpenCL рдЬреИрд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ API рдУрд╡рд░рд▓реЛрдбреЗрдб рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрдВрдЯреЗрдирд░ API рдХреЗ рднреЗрдж рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП a->property рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреВрд▓рд┐рдпрд╛; рд╕реА; рд╕реЗ рд╣реИрдХрд░ рдХреЛ рджреВрд░ рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛;

рдореБрдЭреЗ .. рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИред

a->property рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЛрд▓реА рдЬрд╛рддреА рд╣реИ - рдпрд╣ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, a..b рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рддрд╛рдирд╛рд╢рд╛рд╣ рдЬреИрд╕рд╛ рд╣реЛ рд▓реЗрдХрд┐рди рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд╖реЗрддреНрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реЛрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрдЯрд░ / рд╕реЗрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рддрд╛рдирд╛рд╢рд╛рд╣ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

"A-> рдкреНрд░реЙрдкрд░реНрдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ - рдпрд╣ рдПрдХ рдЧреБрдордирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИред"

рд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ред рдпрд╣ -> рдЖрд╕рдкрд╛рд╕ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рдерд╛ред

рдПрдХ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдбрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ (x) рдХреЛ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ x.property рдХреЛ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП, x.foo = рдмрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ set_foo рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! (X, рдмрд╛рд░)ред

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП foo(x) рд╣реЛрдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП x.foo рдХрд╛рдлреА рднреНрд░рд╛рдордХ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣реА рд╡рд╣ рдЧреБрдг рд╣реИ рдЬреЛ рдЗрддрдирд╛ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИред рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдиреЗ, рдпрд╛рдиреА рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ (рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП) рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ

рд╢реИрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдбрд╝рд╛ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рджреЛрдиреЛрдВ x.length рдФрд░ length(x) рдпрджрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдпрд╛ рдмрд╛рдж рдХреЗ рдлрд╝реЙрд░реНрдо рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЗрд╡рд▓ x.length рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╢реИрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдлрд╝реАрд▓реНрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫред рдореИрдВрдиреЗ C # рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдерд╛ рдХрд┐ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред

рдореИрдВ 1-рддрд░реНрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдиреЗ рдЧрдП рд╕реЗрдЯ рдХреЛ x.f рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ рдореМрд░реЛ 3 рдиреЗ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдХреА рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рднрд╛рд╖рд╛ рдХреА рдкреНрд░рдХреГрддрд┐

a.b , рдХрдо рд╕реЗ рдХрдо рдиреЗрддреНрд░рд╣реАрди, рдПрдХ рд╕реНрдХреВрдкрд┐рдВрдЧ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред b рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рджреГрд╢реНрдпрдорд╛рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд╕рд╛рде рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлреИрдХреНрдЯрд░рд┐рдЬрд╝реЗрд╢рди рдореЗрдВ .U рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рдирд╣реАрдВ рд╣реИ --- рд╣рдо рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди U рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ рдпрд╣ рдереЛрдбрд╝рд╛ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдЖрдк U(x) = x.U рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди length рдПрдХ рдЕрд▓рдЧ рддрд░рд╣ рдХреА рдЪреАрдЬ рд╣реИред рдкреНрд░рдердо рд╢реНрд░реЗрдгреА (рдЬреИрд╕реЗ map(length, lst) ) рд╣реЛрдирд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИред

рдпрд╣рд╛рдВ рд╡реЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдЬреЛ рдореИрдВ рд╕реБрдЭрд╛рдКрдВрдЧрд╛ред foo.bar рдЕрдВрдХрди рдЙрдЪрд┐рдд рд╣реИ рдЬрдм:

  1. foo рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ bar рдирд╛рдо рд╡рд╛рд▓рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг: (1:10).start ред
  2. foo рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдореВрд╣ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .bar рдирд╛рдо рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ; рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ foo рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ bar рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдореВрд▓реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг: (1:10).step , (0.1:0.1:0.3).step ред
  3. рдпрджреНрдпрдкрд┐ foo рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ bar рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдорд╛рди рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдпрд╛ рдХреБрд╢рд▓ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг: lufact(rand(5,5)).U ред
  4. рдЖрдк рдкрд╛рдпрдерди рдпрд╛ рдЬрд╛рд╡рд╛ рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣ bar рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП 1 рдФрд░ 3 рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 2 рдирд╣реАрдВред рдХреЗрд╕ 2 рдореЗрдВ, рдЪреВрдВрдХрд┐ рдЖрдк рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк bar рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдореНрдпреВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рд╕рдВрднрд╡рддрдГ bar рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рдХрд░ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ foo.bar = baz рдПрдХ рддреНрд░реБрдЯрд┐ рдмрдирд╛рдХрд░ред

@tknopp , рдореИрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП x.foo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рдерд╛ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП foo(x) ред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рдерд╛ рдХрд┐ _if_ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдкрдардиреАрдп рдФрд░ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЖрдк _both_ рдХреЛ x.foo рд╕рд╛рде рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@StefanKarpinski : рд▓реЗрдХрд┐рди length рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред 3. рдЬрд╣рд╛рдБ рдЖрдХрд╛рд░ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ length рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рдж рд╣реЛрддрд╛ рд╣реИ?

рдореИрдВ рдЬреЗрдл рдХреЛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рдПрдЧрд╛ред

@stevengj : рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

@ рдЯреЗрдХрдиреЛрдк - рд▓рдВрдмрд╛рдИ рдЖрдХрд╛рд░реЛрдВ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЖрдХрд╛рд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдзреБрдВрдзрд▓реА рд░реЗрдЦрд╛ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИред рдпрд╣ lufact рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдПрдкреАрдЖрдИ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реИред рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг upper рдФрд░ lower рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдКрдкрд░реА-рддреНрд░рд┐рдХреЛрдгреАрдп рдФрд░ рдирд┐рдЪрд▓реЗ-рддреНрд░рд┐рдХреЛрдгреАрдп рднрд╛рдЧреЛрдВ рдХреЛ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпреВрдЖрд░ рдлреИрдХреНрдЯрд░рд╢рд┐рдк рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╣реА рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ _really_ рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддреЗ рд╣реИрдВ: pycall, factorifications, рдФрд░ рд╢рд╛рдпрдж рдбреЗрдЯрд╛рдлреНрд░реЗрдоред
рдореИрдВ f(x) рдмрдирд╛рдо x.f рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рдВрдмрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ; рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рдмрдирд╛ рджреЗрдЧрд╛ред

рдХреНрдпрд╛ @StefanKarpinski рдХреА рд╕реВрдЪреА рдХрд╛ 1 рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рднреА рдХреНрд╖реЗрддреНрд░ рд╕реНрд╡рддрдГ рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд╣реИ: рд╕рднреА рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдФрд░ рдкреНрд░рдХрд╛рд░ (рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ)ред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдпрд╣ рдмрддрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдХреНрд╖реЗрддреНрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВред рд╣рдо рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ a._foo рдпрд╛ рддреЛ рдирд╛рдо рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХрд╛ рдорд╛рдорд▓рд╛ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдХрдо рд╣реИред рдпрджрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ DataFrames рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдерд┐рд░рддрд╛ рдХреА рд╣рд╛рдирд┐ рдЕрдзрд┐рдХ рдкрд░реЗрд╢рд╛рди рдХрд░рддреА рд╣реИред

рдореИрдВ рдпрд╣ рдирд┐рд░реНрдгрдп рдбреЗрдЯрд╛рдлреНрд░реЗрдо, PyCall (рдФрд░ Gtk рдпрд╣ рднреА рдЪрд╛рд╣рддрд╛ рд╣реИ) рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╛ рддреЛ рд╣рдо рдпрд╣ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЦреЗрддреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ") рдпрд╛ рд╣рдо рдЗрд╕реЗ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

... pycall ...

рдФрд░ JavaCall

рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЧреИрд░ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░рдгрд╛рд▓реА, рдХреНрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреЗ рдмрд╛рдж рд╕реЗ .. рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рднрд╛рд░ . ?

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди OO рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдЯ-рдЯрд┐рдк рд╣реИ:

#we already do
A[b] => getindex(A,b)
#we could have
A.b(args...) => b(A, args...)
# while
A..b => getfield(A,::Field{:b})
# with default
getfield(A, ::Field{:b}) = getfield(A, :b)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ JavaCall / PyCall рдХреЛ "рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ" рдХреЛ "рдХрдХреНрд╖рд╛рдУрдВ" рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╢реИрд▓реА рдХреА рдЕрдиреБрдорддрд┐ рднреА рдпрджрд┐ рд▓реЛрдЧ рдХреБрдЫ OO рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдкрд╛рд░рджрд░реНрд╢реА A.b() рдХреЗрд╡рд▓ рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ OO рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрдЧрд╛ред
рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирдП getfield A..b , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣рд╛рдВ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдлрд╝реАрд▓реНрдб-рдЬреИрд╕реЗ / рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред getfield(A, ::Field{:field}) рдХреА рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдереЛрдбрд╝реА-рд╕реА рдХрдореА рдХреЗ рдХрд╛рд░рдгред

@ рдореМрд░реЛ 3 :

рдХреНрдпрд╛ @StefanKarpinski рдХреА рд╕реВрдЪреА рдХрд╛ 1 рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рднреА рдХреНрд╖реЗрддреНрд░ рд╕реНрд╡рддрдГ рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

рдпрд╣ рдПрдХ рд╕реВрдЪреА рдереА рдЬрдм foo.bar рд╕рдВрдХреЗрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рдЬрдм рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛред рдЖрдк "рдирд┐рдЬреА" рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП foo.bar рдиреЛрдЯреЗрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рддрдм foo..bar рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдЧрд╛ред

@karbarcca : рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдЙрд╕ рдкрд░ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВред

fwiw, рдореИрдВ рдХрдВрд╕реЗрдВрдЯ-рдПрдбрд▓реНрдЯреНрд╕-рдмрд╛рдп-рдХрдиреНрд╡реЗрдВрд╢рди рдЕрдкреНрд░реЛрдЪ рд▓реЗрдиреЗ рдФрд░ . рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрдмрд▓-рдбреЙрдЯ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрдо рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рднреНрд░рдо рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред

@ рдЖрдИрдиреЙрд░реНрдЯрди - рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП a..b ( a..b рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИрдВ?

рдЬреВрд▓рд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХреА рд╕рд╛рджрдЧреА рд╣реИред рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ x.y рд╕рдбрд╝рдХ рдкрд░ рд╕реА ++ рдХреЗ рдкрд╣рд▓реЗ рдХрджрдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@StefanKarpinski рд▓реЗрдХрд┐рди рддрдм рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рдмрджрд▓рд╛рд╡ред

рдПрдХ рдЕрд╣рд╕рд╛рд╕ рдЬреЛ рдореБрдЭреЗ рдЕрднреА рд╣реБрдЖ рдерд╛, рд╢рд╛рдпрдж рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдерд╛ред рдкреВрд░реНрдг OO- рд╢реИрд▓реА рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореВрд▓ . -рдкреНрд░рднрд╛рд░ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдпрджреНрдпрдкрд┐ рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ)ред рдкрд░рд┐рднрд╛рд╖рд┐рдд

getfield(x::MyType, ::Field{:foo}) = args -> foofun(x, args...) # a method, i.e. returns a function
getfield(x::MyType, ::Field{:bar}) = x..bar+2                  # field access, i.e. returns a value

рддрдм x.foo(a,b) рдФрд░ x.bar рдХрд╛рдоред рддреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ x.size(1) рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреЗрд╡рд▓ x.size рдореВрдЯ рд╣реИред

@StefanKarpinski рдЖрдорддреМрд░ рдкрд░ рдЕрдзрд┐рднрд╛рд░ a..b рдФрд░ рдЧреБрдирдЧреБрдирд╛ a..b -> Core.getfield(a,b) рдЦрд┐рд▓рд╛рдлред

рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди a..b рдХрд╛рдлреА рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИред рджреЛ рдкрд╛рддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрд╣реБрдд рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИ ... рджреНрд╡рд┐рддреАрдп рд╢реНрд░реЗрдгреАред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ a@b , a$b , рдпрд╛ a|b (рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрдЯрд░реНрд╕ рдмрд╕ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред рдПрдХ рдмрд╛рд╣рд░реА рд╕рдВрднрд╛рд╡рдирд╛ рднреА a b` рд╣реИ, рдЬреЛ рд╢рд╛рдпрдж рдкрд╛рд░реНрд╕рд░ рдЖрджреЗрд╢реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЖрджрд┐рдо рдХреНрд╖реЗрддреНрд░ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП "рдмрджрд╕реВрд░рдд" рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдареЛрд╕ рдСрдкрд░реЗрд╢рди рд╣реИ, рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдЦрддрд░рдирд╛рдХ рд╣реИред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рдореНрдореЗрд▓рди / рдкреБрдирд░реНрд▓реЗрдЦрди рджреНрд╡рд╛рд░рд╛ OO рдПрдХрд▓ рдкреНрд░реЗрд╖рдг рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐:

type Type end
# I can define methods with my Type as 1st argument
method(T, args...) = # method body
t = Type()
# then I can call that method, exactly like Java/Python methods, via:
t.method(args...)
# so
t.method(args...) 
# is just a rewrite to
method(t, args...)

рдпрд╣рд╛рдБ рдФрдЪрд┐рддреНрдп рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА getindex / setindex рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд░реАрд░рд╛рдЗрдЯ рдХрд░рддреЗ рд╣реИрдВ!, рддреЛ рдЪрд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг OO рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣, PyCall рдФрд░ JavaCall рдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ

my_dna[:find]("ACT")
# they can do
my_dna.find("ACT")
# by defining the appropriate find( ::PyObject, args...) method when importing modules from Python/Java

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЧреЗрдЯрдЗрдВрдбреЗрдХреНрд╕ / рд╕реЗрдЯрд┐рдВрдбреЗрдХреНрд╕, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдУрдУ рднрд╛рд╖рд╛ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдкреНрд░реЗрд╖рдг рдУрдУ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореИрдВ рддрдм рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП .. рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛ред рдпрд╣рд╛рдБ рдЙрдкрдпреЛрдЧ PyCall / JavaCall рдХреЛ .. рд╕реЗ рдЕрдзрд┐рдХ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, DataFrames рдХреЛ рдХреЙрд▓рдо рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП .. рдЕрдзрд┐рднрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдпрд╣ рднреА рдирдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпред

рдореЗрд░реЗ рдкрд╛рд╕ рд╢реБрджреНрдз рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд░рдо рд╕реНрдерд╛рди рд╣реИред рдпрдХреАрдирди рдпрд╣ рдПрдХ рдмреБрд░реА рдмрд╛рдд рд╣реИ рдХрд┐ рдЖрдк a.f(x) рдЕрднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ OO рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред

рдмреЗрд╢рдХ рдЙрд╕ рд╕рд┐рдХреНрдХреЗ рдХрд╛ рджреВрд╕рд░рд╛ рдкрд╣рд▓реВ рднрдпрд╛рдирдХ рд╢реИрд▓реА рдХрд╛ рд╡рд┐рдЦрдВрдбрди рд╣реИ, рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ a.f a.f() рд╕рд╛рде рдЖрдо рддреМрд░ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рднреНрд░рдо рдЬрд▓реНрджреА рд╕реЗ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

рдЬреВрд▓рд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХреА рд╕рд╛рджрдЧреА рд╣реИред рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ x.y рд╕рдбрд╝рдХ рдкрд░ рд╕реА ++ рдХреЗ рдкрд╣рд▓реЗ рдХрджрдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рд╡рд╣реА рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЕрдЧрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЗрдВрдЯрд░реЛрдк рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдШреЛрд╖рдгрд╛ рдореЗрдВ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рдкрд░ рдЗрд╕реЗ рд╡реИрдз рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП type рдФрд░ immutable ootype рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ af рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ (), рдЬрд┐рд╕рд╕реЗ рднреНрд░рдо рдЬрд▓реНрджреА рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм @JeffBezanson рдХреНрдпрд╛ рд╣реИ?

рдореИрдВ рдЙрдореНрдореАрдж рдереА рдХрд┐ a.f рд╡рд┐рдзрд┐ рд╡рд╕реНрддреБ рд╣реИ, рддреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рд╣реИ a.f() рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрд╣, рд╕рдордЭ рдЧрдпрд╛ред рд╣рд╛рдБ, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ map(t.method,collection) рдЬреИрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

рдореИрдВ @ mauro3 рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ obj.method(...) рдЕрдиреБрдорддрд┐ рджреЗрдХрд░, рдПрдХ рдЬреЛрдЦрд┐рдо рд╣реИ рдХрд┐ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдЬрдЧрд░, рд░реВрдмреА рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд░рд╛рд╣рдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд╣реБ-рдкреНрд░реЗрд╖рдг рдЬреЛ рдЕрд╢реБрдн рд╣реИред рдЕрдиреНрдп рдЬреЛрдЦрд┐рдо рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдК рд╢реИрд▓реА рддрдм рдкреНрд░рдореБрдЦ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рддрдХ рд╡рд┐рдХрд╕рд┐рдд рдЕрдзрд┐рдХ рдЬреВрд▓рд┐рдпрди рд╢реИрд▓реА рдХреЗ рд╡рд┐рдкрд░реАрддред

рдЪреВрдВрдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛, рдбреЗрдЯрд╛рдлреНрд░реИрдореНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдУрдУ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░-рдСрдк рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╕рдм рдореИрдХреНрд░реЛрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╛рдиреА <strong i="8">@oo</strong> obj.method(a) method(obj,a) рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?

@karbarcca рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рджреЛ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

x = 3
x.sin()
sin(x)
x + 2
x.+(2) # ?!

@karbarcca https://github.com/JuliaLang/julia/issues/1974#issuecomment -38830330

t.method (args ...)
# рдмрд╕ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ
рд╡рд┐рдзрд┐ (рдЯреА, рдЖрд░реНрдЧ ...)

PyCall рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рднрд╛рд░ рдбреЙрдЯ рдХреЛ рд╕рд┐рд░реНрдл pyobj[:func] pyobj.func рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдм pyobj.func() рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (pyobj.func)() ред

a.foo(x) foo(a, x) рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рд╕реЗ PyCall рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ foo рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рдЬреВрд▓рд┐рдпрд╛ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдореБрдЭреЗ a.foo(x) getfield(a, Field{:foo})(x) рдпрд╛ getfield(a, Field{:foo}, x) ] рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдореЗрд░рд╛ getfield{S}(::PyObject, ::Type{Field{S}}) рд╕рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХреЗред

@JeffBezanson https://github.com/JuliaLang/julia/issues/1974#issuecomment -38837755

рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди a..b рдХрд╛рдлреА рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИред рджреЛ рдкрд╛рддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрд╣реБрдд рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИ ... рджреНрд╡рд┐рддреАрдп рд╢реНрд░реЗрдгреА

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐, рджреВрд╕рд░реА рддрд░рдл, .. $ , @ рдпрд╛ | рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рд╢рд┐рдлреНрдЯ рдХреБрдВрдЬреА рдХреЛ рджрдмрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред , рдФрд░ рджреЛ рдЕрдХреНрд╖рд░ рд╣реЛрддреЗ рд╣реБрдП рднреА рдЙрдВрдЧрд▓реА рдПрдХ рд╣реА рдХреБрдВрдЬреА рдкрд░ рд░рд╣рддреА рд╣реИ: рдореБрд╕реНрдХрд╛рди:

@stevengj рдЖрд╣, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореЗрд░реА рдмрд╛рдд рдЕрдм рднреА рдХрд╛рдпрдо рд╣реИ, рдХрд┐ рдкреБрдирд░реНрд▓реЗрдЦрди рдПрдХ рд╕реНрдереВрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

JavaCall рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдЬреНрдЮрд╛рдд рд░реВрдк рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпрд╛ рдЕрд╡рд░реЛрдзрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдХреНрдпрд╛ рдПрдХ рдирд┐рдпрдо рд╣реИ рдХрд┐ "рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП (рдП,: рдПрдХреНрд╕) рдХреЗрд╡рд▓ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХреНрд╕ рдПрдХ рдореМрдЬреВрджрд╛ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ" рдЪреАрдЬреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ?

@simonbyrne , рдореИрдХреНрд░реЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реНрд╡рдЪреНрдЫ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдЗрдВрдЯрд░рд▓реЗрдВрдЬреЗрдЬ рдХреЙрд▓рд┐рдВрдЧ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рдкрд░рд╛рдЬрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ type Foo; p::PyObject; end , рдФрд░ рдХрд┐рд╕реА рд╡рд╕реНрддреБ f::Foo рдЖрдк foo.p.bar рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ bar рдкрд╛рдпрдерди рдкреНрд░реЙрдкрд░реНрдЯреА рд▓реБрдХрдЕрдк рд╣реИред рдпрд╣ рдПрдХ рдРрд╕реЗ рдореИрдХреНрд░реЛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдЬреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рджреЛ рдбреЙрдЯреНрд╕ рдХреЗ рдЕрд░реНрдереЛрдВ рдХреЛ foo.p.bar ред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рд╢реИрд▓реА рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ Base рдФрд░ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╢реИрд▓реА рдХреА рдирдХрд▓ рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рдФрд░ рдХреБрдЫ рд▓реЛрдЧ рдЕрдЬреАрдм рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ рдЪрд╛рд╣реЗ рд╣рдо рдХреБрдЫ рднреА рдХрд░реЗрдВред рдпрджрд┐ рд╣рдо рдореИрдиреБрдЕрд▓ рдХреЗ рдмрд╛рдж рдХреЗ рднрд╛рдЧ рдореЗрдВ рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЪрдпрдирд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдЕрдВрддрд░-рднрд╛рд╖рд╛ рдЕрдВрддрд░, рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рдЧреБрдг, рд╢рд╛рдпрдж factor.U рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рдкреНрд░рджреВрд╖рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП) , рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ foo[:bar] ) рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓реАрдирд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рд╣рд░ рдЪреАрдЬ рдХреЗ рд╕рд╛рде рдбреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рдПрдВрдЧреЗред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП _we_ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдЧрд╛, рдФрд░ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЙрдкрдпреЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрд╣реБрдд рдХрдо рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред

рд╣рдо type Foo; bar(...) = ....; end рд▓рд┐рдП foo.bar(...) рдЬреИрд╕реЗ рд╕реБрдкрд░-рдЖрд╕рд╛рди OO- рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрд┐ newbies рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рд▓реЛрднрди рд╕реАрдорд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ @stevengj рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╕рд╣рдорддрд┐ рдореЗрдВ a..b рдХреНрдпреЛрдВрдХрд┐ рдпрд╣

  1. a.b рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ
  2. рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  3. рдХреЗрд╡рд▓ _slightly_ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ
  4. рдЗрд╕рдХрд╛ рдХреЛрдИ рдореМрдЬреВрджрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдордиреЗ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдореНрдореЛрд╣рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ
  5. a b` рдЬреИрд╕реЗ рднрдпрд╛рдирдХ рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рдирд╣реАрдВ рд╣реИ

рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдФрд░ рд╕рдВрднрд╡рддрдГ (https://github.com/JuliaLang/julia/issues/2403) рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рд╡рд╛рдХреНрдп рдУрд╡рд░рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ? (рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ) рдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрддрд╛рд░рд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рдЧрддреА рд╣реИред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд░рд▓реАрдХрд░рдг рд╣реИред рдЯрд░реНрдиреЗрд░реА рдСрдкрд░реЗрдЯрд░ рдФрд░ && рдФрд░ || рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрд▓рдЧ рд╣реИред рдмреЗрд╢рдХ, рдЙрд╕ рд╕рдордп рдХреЗ рдмрд╛рдж рд╕реЗ a..b рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдБрдЪ рдмрдирд╛рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЗрд╕ рддрд░рд╣ рдХрд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ _that_ рдХреЗрд╡рд▓ рдЧреИрд░-рдЕрдзрд┐рднрд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рд╕рдВрдЧрддрд┐ рдЕрдЪреНрдЫреА рд╣реИ рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрдкрд░рд┐ рдирд╣реАрдВред

рдУрд╣, рдлрдВрдХреНрд╢рди рдХреЙрд▓ рднреА рд╣реИ рдЬреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред

рдпрд╣реА рд╕рдорд╕реНрдпрд╛ # 2403 рдкрддреЗ рдХреА рд╣реИред

рд╣рд╛рдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдорд░рд╣рдо рдореЗрдВ рдХреЗрд╡рд▓ рдордХреНрдЦреА рдпрд╣ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА Package..foo рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдбреЙрдЯреНрд╕ рдХреЗ рдмрд╛рдж рдЯреИрдм-рдкреВрд░рд╛ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдмрджрд╕реВрд░рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ; рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдзрд┐ x. рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдирд╛рдореЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА getfield(::Module, ...) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреИрдм рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: foo.<tab> "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░" рдФрд░ foo..<tab> "рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ" рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдареАрдХ рд╣реЛ рдмрд╕ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ Mod.foo рд╣реЛ Mod..foo рдФрд░ рдмрд╕ рдХреЛ getfield рд╡рд┐рдзрд┐рдпрд╛рдВ рди рдЬреЛрдбрд╝рдирд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдмрддрд╛ Module ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реНрдгрд╛рдВрдХ рдЬреЛрдбрд╝ рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рднреА рдирд░рдХ рдвреАрд▓реЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдПрдХ segfault рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рдЦрд░рд╛рдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдирд╛рдордХрд░рдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреА рд╣реИред рдкреВрд░реНрдгрд╛рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдирд╛рдореЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Mod.foo рдбрд┐рдлрд╝реЙрд▓реНрдЯ Mod..foo , рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП Mod..foo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред .. рдСрдкрд░реЗрдЯрд░ рдпрд╣рд╛рдВ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЖрдк рдХреЙрд▓рдмреИрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Core.getfield рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рдВрднрд╡рддрдГ Core.getfield рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗ рдФрд░ рдХреЗрд╡рд▓ .. ред

рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдмрд┐рдВрджреБ рд╣реИ - рдирд╛рдордХрд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИ :-)ред рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ - рдХреЗрд╡рд▓ .. рдФрд░ Core.getfield ред

рдпрд╣ рджреЛ рд╡рд┐рдЪрд╛рд░,

[...] рдирд┐рдпрдорд╛рд╡рд▓реА рдХреЗ рдмрд╛рдж рдХреЗ рднрд╛рдЧ рдореЗрдВ рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЪрдпрдирд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реА рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ @stevengj https://github.com/JuliaLang/julia/issues/1974#issuecument -38847340

рддрдерд╛

[...] рд╡рд░реАрдпрддрд╛ рддрдХ рд╕рдВрднрд╡ рд╣реЛ, рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ x.property рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП @StefanKarpinski https://github.com/JuliaLang/julia/issues/1974#issuecomment -+рей,реорем,репрек,реореорел

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рд╣реИ, рддреЛ рдмрд╕ рдЙрди "рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЪрдпрдирд┐рдд рдорд╛рдорд▓реЛрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ .. рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рд▓рд╛рдн, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ ..name рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рдХреЗ рд▓рд┐рдП [:name] рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (DataFrames, Dict {рдкреНрд░рддреАрдХ, ...}) рд╣реЛрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ / рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЕрдиреБрдХреВрд▓ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрд┐ рдХреБрдЫ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд╣рд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ..name рдореЗрдВ рдбрдмрд▓ рдбреЙрдЯ рдХреЛ рдПрдХ рдШреБрдорд╛рдпрд╛ рд╣реБрдЖ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рддреАрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ :name рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА рдЯреИрдм рдкреВрд░реНрдгрддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдиреБрдХрд╕рд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, PyCall рдПрдЯ рдЕрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЗрддрдирд╛ рдХрд░реАрдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм . рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреВрд▓рд┐рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рдпрдерди рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реЛрдВрдЧреЗ рдЬрд╣рд╛рдВ рдПрдХ рдХреЛ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдЕрдиреНрдпрдерд╛ рд╕рд░рд▓ рдирд┐рд░реНрджреЗрд╢ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдХреЙрд▓ рдХреЗ рд╕рд╛рдеред .. . рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрддреБрд▓рди рджреЗ рд╕рдХрддрд╛ рд╣реИред (рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЧрд▓рдд рди рд╕рдордЭреЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PyCall рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рджреЗрдЦрднрд╛рд▓ рдХреЗ рдпреЛрдЧреНрдп рд╣реИ)

рджреВрд╕рд░реА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛, рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдбрд╝рд╛ рдлреИрд╕рд▓рд╛ рд╣реИ рдЬрдм property(x) рдпрд╛ x.property рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрдЧрд░ рдРрд╕реА рдмрд╛рдд рдореМрдЬреВрдж рд╣реИ .. ред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд▓реЛрдЧ рдПрдХ рдЕрдзрд┐рднрд╛рд░ . рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ x.property API рд╢реИрд▓реА рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ рднреА, рдореИрдВ . рдХреЛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдЕрднрд┐рдЧрдо рд╕рдВрдЪрд╛рд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдЕрдзрд┐рднрд╛рд░ "рд╕рдВрдкрддреНрддрд┐" рдЕрднрд┐рдЧрдо рд╕рдВрдЪрд╛рд▓рдХ ( getprop(a, Field{:foo}) рд╢рд╛рдпрдж?) рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдПрдХ рдЧреИрд░-рдЕрдзрд┐рднрд╛рд░ рдпреЛрдЧреНрдп рд╕рдВрдЪрд╛рд▓рдХ .. рд▓рд┐рдП рдЪреВрдХ рдХрд░рддрд╛ рд╣реИ?
рдЕрдиреНрдп рдирд┐рд░реНрдгрдп рднреА рд▓реЗрдиреЗ рдкрдбрд╝реЗрдВрдЧреЗ, рдЬреИрд╕реЗ, рдЬреЛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, .. рдпрд╛ . ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдВрдЬрд╝ рд╕реНрдЯреЗрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реЛрдЧрд╛? step(r::Range1) = one(r..start) рдпрд╛ step(r::Range1) = one(r.start) ? (рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ step рдПрдХ рд╡рд┐рдзрд┐ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд╕ рдПрдВрдЧрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдФрд░ рдЗрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛: https://github.com/JuliaLang/julia/issues/1974#issuecomment -38812139ред

рдЗрд╕ рджрд┐рд▓рдЪрд╕реНрдк рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП рдмрд╕ рдПрдХ рд╣реА рдЦреНрдпрд╛рд▓ рдЖрдпрд╛ рдХрд┐ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдЦрд╕рдЦрд╕ тАЛтАЛрд╣реИред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рднреА рдХреНрд╖реЗрддреНрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

module Foo
   type Person
     name
     age
   end
   export Person, Person.name
   <strong i="6">@property</strong> Person :age(person) = person..age + 1
end

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реНрдпрдХреНрддрд┐ рдЕрднреА рднреА 'рдирд╛рдо' рдФрд░ 'рдЙрдореНрд░' рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЙрдореНрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛрддреА рд╣реИ рдЬреЛ рдПрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╕рднреА рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдирд┐рд░реНрдпрд╛рдд рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред * рдпрд╛ рд╕рдорд╛рдиред

[рдкрд╛рдУ: рдЙрджреНрдзрд░рдг]

@emeseles рдХреГрдкрдпрд╛ рдЬреВрд▓рд┐рдпрд╛ рдХреЛрдб рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

. рдФрд░ .. рднреНрд░рдорд┐рдд рд╣реИрдВ: рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЖрд╕рд╛рди рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реИ

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред рдХреНрдпрд╛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ (рдпрд╛ # 5848 рдореЗрдВ WIP) рдХреЛ 0.4-рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рд╣рд╛рдВ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЙрдкрдпреЛрдЧ рд╕реАрдорд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдеред рдореЗрд░реА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╢реБрд░реВ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЕрдВрддрд░реНрд╕рдВрдЪрд╛рд▓рдиреАрдпрддрд╛ (рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ рдХрд┐ PyCall рдореЗрдВ, рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдбреЙрдЯ рд╕рдВрдХреЗрддрди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ), рдФрд░ рд╢рд╛рдпрдж рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рд░рд╛рдЬреНрдп рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП ( get_foo(x) рдФрд░ set_foo!(x, val) рдмрджрд╕реВрд░рдд рд╣реИрдВ)ред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рджреЗрд╢реА-рдХреЙрд▓ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрджреНрджреЗрд╢реНрдп рдЕрдХреЗрд▓реЗ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЬреВрд▓рд┐рдпрд╛ рдЬреИрд╕реА рдирдИ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП, рдмрд╛рдХреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рд╣рдЬрддрд╛ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╕реНрдЯреАрд╡рди, рдореИрдВ рдЧрдЯрд░ / рд╕реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдЙрд╕ рдкрд░ рд╣рдо Gtk.jl рдЧрддрд┐рд╢реАрд▓ рдЧреБрдгреЛрдВ рдореЗрдВ рд╣реИ рдЬреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рднреА рд▓рд╛рдн рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрджреАрджрд╛ enum рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рд╕реНрдЯреАрдлрди # 5842 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред

рдЯрдХреНрдХрд░ред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреЛ рдХреНрдпрд╛ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдПрдХ рдирд┐рд░реНрдгрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдореБрджреНрджрд╛ рдЕрдиреНрдп рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдХреЛрдбрд┐рдВрдЧ рд╣реИ?

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреЛ рдХреНрдпрд╛ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ?

рдХреЛрдИ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреЛрдИ рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рдХрд╛рдо рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ @ihnorton рдиреЗ рдкрд╣рд▓реЗ рд╣реА # 5848 рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдардк рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЛрд░ рдЯреАрдо рд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдмрдпрд╛рди рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдкрд░ рд╕рд╡рд╛рд░ рд╣реВрдВред @JeffBezanson рдмрд╛рдбрд╝ рдкрд░ рд▓рдЧрддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдиреЗ рд╕реЗ, рд╣рдорд╛рд░реЗ рдмрдбрд╝реЗ рдкрд╛рдпрдерди рдХреЛрдб рдмреЗрд╕ рд╕реЗ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╡реЗ рдкрд╛рдпрдерди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд╣реБрдд рдЕрд▓рдЧ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрдм рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рд╣рдорд╛рд░реА рдпрд╣ рдЪрд░реНрдЪрд╛ рдКрдкрд░ рдереА рдФрд░ рдореИрдВ рдЕрднреА рднреА рдкреВрд░реНрдг рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдИ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпреЛрдВ / рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рдПрдХ рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдпреЛрдЬрдирд╛ рд╕реЗ рдмрд╣реБрдд рджреБрд░реНрд▓рдн рдЕрдкрд╡рд╛рдж рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред (рдПрд▓рдпреВ рдЕрдкрдШрдЯрди рдореЗрдВ .U ?)

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рдПрдХреНрд╕реЗрд╕ рдФрд░ рдПрдирдо рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред рдлрд┐рд░ рднреА рдХреЛрдИ рдпрд╣ рд╕рд╡рд╛рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЬрд░реВрд░рдд рдХрд┐рддрдиреА рдЬрд░реВрд░реА рд╣реИ рдФрд░ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрджреНрдзрд┐рдорд╛рди рд╣реЛрдЧрд╛ред

@ ufechner7 , рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЦреНрдп рдкреНрд░реЗрд░рдгрд╛ рдЕрдВрддрд░-рднрд╛рд╖рд╛ рдЗрдВрдЯрд░реЛрдк рд╣реИред @ рдЯреЗрдХрдиреЛрдк , рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рдХрднреА рднреА рдПрдХрдордд рдирд╣реАрдВ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЕрдВрддрддрдГ рдпрд╣ @JeffBezanson рдФрд░ @StefanKarpinski рддрдп рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдл рдХреЗ рдмреБрд░реЗ рд╕рдкрдиреЗ рдЖрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рд╕реЗ рдореБрдЭреЗ рдмрд╣реБрдд рдЭрд┐рдЭрдХ рд╣реЛрддреА рд╣реИ:

module DotOrientedProgramming
  Base.getfield(x, ::Field{:size}) = size(x)
  Base.getfield(x, ::Field{:length}) = length(x)
  тЛо
end

рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдирд╛рдкрд╕рдВрдж рднреА рдХрд░реВрдВрдЧрд╛ - рдХреЛрдИ рднреА рдкреИрдХреЗрдЬ рдЬреЛ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЕрдкрдиреЗ рджреБрд░реБрдкрдпреЛрдЧ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ _all_ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдореЗрд░рд╛ рд╕реНрд╡рдпрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ рдФрд░ рдпрд╣ рдмрджрд▓ рджреЗрдЧреА рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдмреЗрд╣рддрд░ рдФрд░ (рд╢рд╛рдпрдж, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рдирд╣реАрдВ) рдмрджрддрд░ рдХреЗ рд▓рд┐рдПред

рд╣рд╛рдБ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕реНрдЯреАрд╡рди, рдХрд┐ рдореБрдЭрд╕реЗ рдареАрдХ рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЬреЛ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдЧреАред рдФрд░ "рдФрдкрдЪрд╛рд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдореЗрдВ рд╣реИ, рд╡рд╣ . рдЕрдзрд┐рднрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред рддреЛ рд╣рд╛рдВ @JeffBezanson рдФрд░ @StefanKarpinski рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдирд┐рд░реНрдгрдп рдЕрднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ ...

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓рдЧрднрдЧ рд╕рднреА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рджреЗрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕рдВрд╕реНрдХреГрддрд┐ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдВрдЧрд▓реА рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

+1 ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ call рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдХ рдордЬрдмреВрдд рджрд╛рд░реНрд╢рдирд┐рдХ (рдФрд░ рд╕рдВрднрд╡рддрдГ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ ...) рд╣реИред рдореИрдиреБрдЕрд▓ рдХреЛ Don't do stupid stuff: we won't optimize that рд╣рдХрджрд╛рд░ рдЕрдиреБрднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред (рдмреЗрд╢рдХ, call рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ _for_ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдг рдереЗ - рд▓реЗрдХрд┐рди рдпрд╣ рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдкреНрдд рд╣реИ)

  • : 100: рдЙрд╕ рддрдХред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХреГрддрд┐ рдХреЛ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░реЗрд░рдгрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореИрдВ рдЗрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ

  • "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ред рдореБрдЭреЗ a..b рдЗрддрдирд╛ рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред
  • рдореЙрдбреНрдпреВрд▓ред рдпреЛрдЧреНрдп рдирд╛рдо рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдЖрдкрдХреЛ рдХрдИ рдпреЛрдЧреНрдп рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ (рд╢рд╛рдпрдж рдЗрдирд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА) рдмрд╕ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдпреЛрдЧреНрдп рдирд╛рдо рд╣реИред рдпрд╣ рдПрдПрд╕рдЯреА рдХреА рдЦрдкрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЙрдкрдХрд░рдг рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреВрд▓ рдореЗрдВ рдЗрд╕ рдХреЗрд╕ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ рднреА рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рдЭрдЯрдХреЗ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред _Internally_ рдореЙрдбреНрдпреВрд▓ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдЧрд╛; рдЕрдЧрд░ рдпрд╣ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рддреЛ рдирд┐рд░рд╛рд╢рд╛ рд╣реЛрддреАред

рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ: рдпреЛрдЧреНрдп рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП : рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рди рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ:

import Base: call, show, size

рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдирд╛ рд╣реЛрдЧрд╛

module Foo
    module Bar
        f(x) = 3*x
    end
    const a = 42
end

<strong i="10">@assert</strong> Foo:a == 42

Foo:Bar:f(789)

рдпрд╛ рдХреНрдпрд╛ рдЙрдирдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА : рдкреНрд░рддреАрдХ рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рд╣реИ? :: рдкреНрд░рддреАрдХ (C ++ рд╢реИрд▓реА) рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд▓рдЧрддрд╛ рд╣реИред

: рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрддрд┐рднрд╛рд░рд┐рдд рдкреНрд░рддреАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдбрд░ рд╣реИред

рдХреНрдпрд╛ рд╣рдо module.name рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдХрд░ рдпреЛрдЧреНрдп рдирд╛рдордХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЪреВрдБрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реНрдерд┐рд░ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдпреЛрдЧреНрдп рдирд╛рдо рдХреЗ рд▓реБрдХрдЕрдк рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдХреЗ рд╕рдорд╛рди рд╣реА рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ LHS a.b рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдирд╛рдо рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП a..b рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИред рдЗрд╕рдореЗрдВ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЖрдкрддреНрддрд┐ рд╣реИ?

рдПрдХ рддрд░рдл: рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣ рдЖрдпрд╛рдд рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП ( ) рд╕рд╛рде рдЧрдП рдереЗред рдЕрд░реНрдерд╛рдд:

import Base (call, show, size)

рдореЗрд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрдЧрд╛рдореА рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдЧреБрд╕реНрд╕рд╛ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдпрд╛рддрд┐рдд рдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрдиреНрдп рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореИрдВ a.b рдорд╛рдзреНрдп рдмрдирд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ "рдпрджрд┐ a рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рддреЛ рдкрд╣рд▓реЗ рдореЙрдбреНрдпреВрд▓ рд▓реБрдХрдЕрдк рдХрд░реЗрдВ"ред рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рд▓реБрдХрдЕрдк рдХреЗ рдЕрд░реНрде рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рдХреБрдЫ рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рддрдм a.b рдХреЙрд▓ getfield(a,:b) рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдПрд╕рдЯреА рдиреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ рд╣рдо рдПрдХ _explicit_ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдПрд╕рдЯреА рдмреНрд▓реЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░реВрдВрдЧрд╛ред

рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдФрд░ рдмреИрдХ рдПрдВрдб рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдмреАрдЪ рдЗрддрдиреЗ рдмрдбрд╝реЗ рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ рд╣рд░ рдХреЛрдИ a..b рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╕реАрдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдорддрд▓рдм рд╣реИ, рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╢рд╛рдпрджред

рдореИрдВ a..b рдХреЛ рднреА рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЖрдЦрд┐рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреАред рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдХреЗ рдЖрд╡рд░рдг рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреЛрдИ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджреБрд░реНрд▓рдн рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ get_actual_field(a,:x) рддрд░рд╣ рдмрджрд╕реВрд░рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрд╢рди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдо рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╣рдо рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

.. рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд╛рдВ рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдбреЙрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдбреЙрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдПрдЧрд╛; рдЖрдк рдЕрднреА рднреА рдКрдкрд░ @mbauman рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдмрдХрд┐ a..b рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ), рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрдВрддрд░рд╛рд▓ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдирдкреБрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - Interval(a,b) рд▓рд┐рдЦрдирд╛ рдмрд╕ рд╣реИ рдареАрдХ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╣реИ рдФрд░ рдХреЛрдИ рднреА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреА рддрд░рд╣ рднреА рджрд┐рдЦрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдПрдХ рд╕рд┐рд▓реНрд╡рд░ рд▓рд╛рдЗрдирд┐рдВрдЧ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдШреГрдгрд┐рдд module_name рдХреЛ m..name ред рдореЙрдбреНрдпреВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдПрдХ рдорд╕реНрд╕рд╛ рд╣реИред

рд╣рд╛рдВ, рдореИрдВ a.b рдорд╛рдзреНрдп рдмрдирд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ "рдпрджрд┐ a рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рддреЛ рдкрд╣рд▓реЗ рдореЙрдбреНрдпреВрд▓ рд▓реБрдХрдЕрдк рдХрд░реЗрдВ"ред рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рд▓реБрдХрдЕрдк рдХреЗ рдЕрд░реНрде рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рдХреБрдЫ рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рддрдм a.b рдХреЙрд▓ getfield(a,:b) рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдПрд╕рдЯреА рдиреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ рд╣рдо рдПрдХ _explicit_ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдПрд╕рдЯреА рдмреНрд▓реЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рд╣рдо a.b рдмрд┐рдирд╛ рд╢рд░реНрдд рдорддрд▓рдм getfield(a,:b) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ getfield getfield(::Module, ::Field) рдкрджреНрдзрддрд┐ рдХреЛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдпрд╣ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬреАрдм рддрд░реАрдХреЗ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдВрддрддрдГ рдПрдХ рд╣реА рдкреНрд░рднрд╛рд╡ рд╣реЛрдЧрд╛ред рддрдм рдХрдо рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдпреЛрдЧреНрдп рдирд╛рдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП module.name рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реВрдВ: рдХреНрдпрд╛ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреЛрдИ рднреА .. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдпрджрд┐ рд╣рд╛рдБ рддреЛ рдПрдХ рдЕрдиреБрдХрд░рдгреАрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? (рдпрд╛рдиреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)

@StefanKarpinski рд╣рд╛рдВ, рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╕реАрд▓" рддрд░реАрдХреЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@tknopp рдПрдХреНрд╕реЗрд╕ module..name рдФрд░ module..parent :) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП get(obj,:field) рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди-рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдирд╣реАрдВ, рдореИрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреНрдпрд╛ рд╣реИрдВред рдЧрддрд┐рд╢реАрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реЛрдЧрд╛

  • a.b рдПрдХ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рд╣реИ рдпрджрд┐ Base.getfield(a, ::Field{:b}) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • a.b рдЧрддрд┐рд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдпрджрд┐ Base.getfield(a, ::Field{:b}) рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╛рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЫрд╛рдпрд╛рдВрдХрди рдареАрдХ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдБ; рдЖрдк pyobject.x рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ x рд╣рдореЗрд╢рд╛ pyobject рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ, рд╕рднреА x ред рддрдм pyobject рдХреЗ рдЬреВрд▓рд┐рдпрд╛ рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЖрд╣, рддреЛ рдЗрд╕рдХреЗ рд╕рднреА рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ? рдореБрдЭреЗ рдХрд┐рд╕реА рддрд░рд╣ рдЖрднрд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

type A
  c
end

Base.getfield(a::A, ::Field{:b}) = 3

a = A(1)

a.c # This still calls the field access
a.b # This calls the function

рд╣рд╛рдВ, рдЖрдк _can_ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getfield(a::A, ::Field) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж рдЕрдм рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛ред рд╕рднреА рдЧрддрд┐рд╢реАрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ getfield(a::A, ::Field) рдЪрд╛рд╣реЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдВрддрд░рд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рддрдм рдореЗрд░рд╛ рд▓реЗрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ Core.getfield рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬрдм рддрдХ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рдЦреЛрдЬрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред

рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо setfield! , рд╕рд╣реА рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд╕реНрдкрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЯрд╛рдЗрдк рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рд╣рд╛рдВ, рдпрд╣ рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдереАред

рдареАрдХ рд╣реИ, IMHO рдЪрд╛рд╣реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП .. рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ Core.getfield рдЗрддрдиреА рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рд╕рд╛рдорд╛рдиреНрдп рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ 0.4 рдХреЗ рд╕рдордп рд╕реАрдорд╛ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рддреЛ рдпрд╣ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП # 5848 рдФрд░ рдореЙрдбреНрдпреВрд▓ рдпреЛрдЧреНрдп рдмрд╛рдд рд╣реИ?

@johnmyleswhite : рдореИрдВ рдЗрд╕ рд╕рдордорд┐рддрд┐ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдорддрджрд╛рди setfield! рдЕрдиреБрдорддрд┐ рднреА рджреВрдВрдЧрд╛ ред Gtk.jl рдореЗрдВ рд╣рдо рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ PyCall рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рдзрд┐ / рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕ рддрд░рд╣ рдПрдХ рдЬреВрд▓рд┐рдпрд╛ рд╡рд┐рдзрд┐ / рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд┐рдВрдЯреИрдХреНрд╕ Python рдХреЗ рдХрд░реАрдм рд╣реИ)ред рд▓реЗрдХрд┐рди рдлрд┐рд░, Gtk.jl рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? рдпрд╣ рдХрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ foo.bar = x рдХреЗ рдмрдЬрд╛рдп setbar!(foo, x) , рддреЛ рдорд╛рдирдХ рдЬреВрд▓рд┐рдпрд╛ рдХреЛрдб invitably рднреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ: рдпрд╣ рд╣рдо рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЕрдореВрд░реНрдд (рдФрд░ рдареЛрд╕ рднреА) рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп / рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реЛрдЧрд╛?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЧреБрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рдЯрдХрд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреАред

рд░реЗрдлрд░реА .: https://github.com/JuliaLang/julia/issues/4345 , https://groups.google.com/forum/#!msg/julia -рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ / рдкреА 5-lVNlDC8U / 6PYcvvsg29UJ

@nalimilan : рдЧреЗрдЯрд░реНрд╕ /

@tknopp рдЖрд╣, рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ (рддреЗрдЬрд╝) рдЧреЗрдЯреНрдЯрд░ / рд╕реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд╕рд╛рде рд╣реА рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдкрд░реНрдЯреА рднреА рд╣реИред рддреЛ рдХреНрдпрд╛ рдЖрдк рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдЧреЗрдЯрдЯрд░ / рд╕реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдВрдЧреЗ, рдФрд░ рдлрд╝реАрд▓реНрдб рдХреЗрд╡рд▓ рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рдирд╣реАрдВ рд╣реИ? рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЗрд╕ IMHO рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдиреАрддрд┐ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд╣реА рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), f(x) рдмреЗрд╣рддрд░ рд╣реИ рдЬрдм f рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ " рд▓рдВрдмрд╛рдИ "рдЬрдмрдХрд┐ x.f рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм f рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ x рд╕реНрд╡рддрдВрддреНрд░ рди рд╣реЛред рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп step рдХрд╛рд░реНрдп рд╣реЛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реИрдХреНрдЯрд░ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реАрдорд╛ рд╣реЛрдиреЗ рдкрд░ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХрд┐рд╕реА рддрд░рд╣ рдХреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, x.step рд╣реЛрдирд╛ рдПрдХ рд╕реАрдорд╛ x рд╕реАрдорд╛ рдкрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирд┐рд░реНрдгрдп рдХреЙрд▓ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреАрд╡рди рдЙрди рд╕реЗ рднрд░рд╛ рд╣реИред

рдореБрдЭреЗ .. рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реАрдзреА рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдХреИрд╕реЗ foo.bar. рдЕрдВрдд рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд┐рдВрджреБ рдЗрд╕реЗ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдкрд┐рди рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдпреВрдирд┐рдХреЛрдб рдХрд╛ рдкреНрд░рддреАрдХ рднреА рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рдмрдЪреЗ рд╣реИрдВ ...

@GlenHertz , рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@simonbyrne , рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдпрд╛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛрдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдПрдХ рдмрд╛рдд рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдПрдХ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд╣реА рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдПрдл (рдПрдХреНрд╕) рдмреЗрд╣рддрд░ рд╣реИ рдЬрдм рдПрдл рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд▓рдВрдмрд╛рдИ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреИрд╕реЗ "рд▓рдВрдмрд╛рдИ" рдЬрдмрдХрд┐ рдПрдХреНрд╕рдПрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм f рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ x рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдирд┐рдпрдо рд╣реИ: рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдЗрдВрдЯрд░реЛрдк рдХреЗ рд▓рд┐рдП рдпрд╛ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ "рд▓рдЧрднрдЧ рдлрд╝реАрд▓реНрдб" рдпрд╛ "рд╕рдВрд╡рд░реНрдзрд┐рдд рдлрд╝реАрд▓реНрдб" рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдХреИрд╢ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рд╡рд╛рд▓ рд╣реИ: рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ getfield(x::T, s::Symbol) , рдЬреЛ рднрд┐рдиреНрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрди рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЙрддреНрдкрд╛рджрди s ред рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ getfield рдЬрд╛рджреБрдИ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ getfield(x, s) рдирд┐рд╢реНрдЪрд┐рдд x рдФрд░ s рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдХреЗ рд╕рд╛рде рд╡рд╣ рдореЗрд╖ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ getfield(x::T, s::Symbol) , рдЬреЛ рднрд┐рдиреНрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрди рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЙрддреНрдкрд╛рджрди s ред

рдЗрд╕реАрд▓рд┐рдП рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЛ getfield{s}(x::T, f::Field{s}) рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рд╣реИ рдЬрд╣рд╛рдБ s рдПрдХ рдкреНрд░рддреАрдХ рд╣реИред

рдореБрдЭреЗ рд╡рд╣ рдпрд╛рдж рдЖ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рд╕рд╛рдл - рд╕рд╛рдл рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@nalimilan : рд╣рд╛рдБ, рдЕрддрд┐рднрд╛рд░рд┐рдд рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЧрддрд┐рд╢реАрд▓ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХреИрд╕реЗ рдЬреЗрдореНрд╕рди рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╕рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рдСрдЯреЛрдЬреЗрдирд░реЗрдЯреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕рднреА рдкреНрд░рд╛рдкреНрдд / рд╕реЗрдЯ рдирд╛рдордХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред GAccessor рдореЙрдбреНрдпреВрд▓ (рд▓рдШреБ G_ ) рдореЗрдВ рд▓рд╛рдЗрд╡

рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП <- рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдпрд╣ -> c ++ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬреЛ рдХрд┐ рд▓рд╛рдорджрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ рд▓реЗрдХрд┐рди <- рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реИред
рдЗрд╕реЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕реАрдзреЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдпрд╣ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ .. рдЕрдкреНрд░рдпреБрдХреНрдд рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдЕрдм рддрдХ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

рдЖрдЗрдП рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдЖрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред

рд╣рдо рд╕рдВрднрд╡рддрдГ C> / C ++ рдХреЛ рд╕реАрдзреЗ рджрд░реНрдкрдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдиред рдЕрдирд╛рдо рд╕рдорд╛рд░реЛрд╣ рдХреА рдореБрдЭреЗ рдХрднреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдЙрд▓рдЯ / рдЕрдкрдардиреАрдп рд╣реИред рд╢рд╛рдпрдж рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд░ рд╕рдХрддреЗ рдереЗ
рдХреБрдЫ рдЗрд╕ рддрд░рд╣

func (x) x ^ 2 рдЕрдВрдд

рдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ, рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд

рдлрд╝рдВрдХреНрд╢рди (x) x ^ 2 рдЕрдВрдд

рд╢рд╛рдпрдж рд╡рд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛
рдПрдХ рдЕрдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред

рдЪрд░реНрдЪрд╛ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓рдирд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП -> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдмреБрдз рдкрд░, 28 рдЬрдирд╡рд░реА, 2015 рдХреЛ 8:49 рдмрдЬреЗ, рдЬреЙрди рдорд╛рдЗрд▓реНрд╕ рд╡реНрд╣рд╛рдЗрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдЖрдЗрдП рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдЖрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/1974#issuecomment -71857083ред

@quinnj : func (x) x^2 end рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ: map(x->x^2, 1:10)

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг @simonbyrne рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдареАрдХ рд╣реИ)ред рдореИрдВ x -> x^2 рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдЦреБрд▓рд╛ / рд▓рдВрдмрд┐рдд рдЪрд░реНрдЪрд╛ рд╣реИ? рдмрд┐рдВрджреА рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рд╡рд┐рднрд┐рдиреНрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд░рд╣рд╛ред

рдХреНрдпрд╛ рдЕрдиреНрдп рдирдП рдСрдкрд░реЗрдЯрд░ рдЯреЛрдХрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? :> рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╕рдорд╛рдирддрд╛рдПрдВ |> рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рдореВрд▓ рдЬреВрд▓рд┐рдпрд╛ _feel_ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

c = foo.a + foo.b
pyobj:>obj:>process(c)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рднреА рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

pyobj[:obj][:procees](c)

рдпрд╛ рддреБрд▓рдирд╛:

someobj :> array |> length 
# vs
length(get_array(someobj)) 

рдореИрдВ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрдИ рдкреНрд░реЗрд╖рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рд╕рд░рд╛рд╣рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП - рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реЛрдЧреА рдХрд┐ OO рдкреНрд░рддрд┐рдорд╛рди / рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреВрд▓рд┐рдпрд╛ рдХреА рд╢реИрд▓реА рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЪреВрдВрдХрд┐ рдореИрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдФрд░ / рдпрд╛ рдЙрджреНрдзрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ рдерд╛:

someobj <: field_name |> length

@elcritch , <: рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ "рдЙрдкрдкреНрд░рдХрд╛рд░" рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ :> рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╡рд┐рд░рд╛рд╕рддред

рдпрджрд┐ instance..member рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред рдЕрдкрдиреА рдЖрдБрдЦреЗрдВ рдврд╛рд▓реЛ! рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдмрджрддрд░ рд╣реИ:

  • instance^.member (рдЧрд╛рдЬрд░ рдбреЙрдЯ)
  • instance~.member (рдЯрд┐рд▓реНрдб рдбреЙрдЯ)
  • instance:.member (рдХреЛрд▓рди рдбреЙрдЯ)
  • instance*.member (рд╕реНрдЯрд╛рд░ рдбреЙрдЯ)
  • instance-.member (рдбреИрд╢ рдбреЙрдЯ)
  • [email protected] (рдПрдЯ-рд╕рд╛рдЗрди рдбреЙрдЯ)
  • instance&.member (рдПрдореНрдкрд░ рдбреЙрдЯ)
  • instance$.member (рдбреЙрд▓рд░ рдбреЙрдЯ)
  • instance<.>member (рд╕реНрдкреЗрд╕рд╢рд┐рдк рдбреЙрдЯ)

рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ (рдП) .. рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ (b) рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдиреЗ рд╣реЛрдЧрд╛ред рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ instance.member рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝реАрд▓реНрдб рдпрд╛ getfield рдкрджреНрдзрддрд┐ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВред

(рдЙрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдЬреЛ рд╕рджрд╕реНрдп рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рд╢рд╛рдпрдж .. рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдПрдБрдЧреЗред рд╡реЗ рд╕рд┐рд░реНрдл foo.member рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ "рдЕрд╕рд▓реА" рдХрд╛ рдирд╛рдо рд▓реЗрдВрдЧреЗред "рдлрд╝реАрд▓реНрдб foo._member ред рд╢рд╛рдпрдж, рдпрд╣ рдмреЗрд╣рддрд░ рд╢реИрд▓реА рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЖрдк type рдкрд░рд┐рднрд╛рд╖рд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ _member рдХреБрдЫ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕реАрдзреЗ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ .. рдХреБрдЫ рдмрджрд╕реВрд░рдд рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрдЧрд╛ рдЬреИрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдЕрдЪрд▓ рд╕рдВрдкрддреНрддрд┐ рд▓реЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп :. ред)

рдореИрдВ рдПрдХ infix рдЕрдВрддрд░рд╛рд▓ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ .. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдпрд╛рдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдзрд┐рднрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдХреА рдкрд╣реБрдВрдЪ рдПрдХ рд╕рд╛рд░реНрдердХ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реИред рдЬрдмрдХрд┐ рдореИрдВ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдЕрд░реНрде рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд▓реНрдХреЗ рд╕реЗ рдбрд░рддрд╛ рд╣реВрдВ, :. рд╡рд╣ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ :. рдЕрднреА symbol(".") рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдиреНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмрд┐рдВрджреБ рдЬреЛ .. рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рд╡рд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рд╣рдо рдЗрд╕реЗ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдореИрдВ @. рддрд░рд╣ рднреА рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд╢ рд╣реВрдБ (рдХреНрдпреЛрдВрдХрд┐ . рдПрдХ рд╡реИрдз рдореИрдХреНрд░реЛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдпрд╣ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ )ред рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдРрд╕рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реБрдВрджрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рд╣реИред

рдХреЗрд╡рд▓ .. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдХреБрд░реВрдкрддрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП +1 рдХрд┐рдпрд╛ рдЧрдпрд╛

рд╣рд╛рдБ, рдЪрд▓реЛ .. рд╡реИрд╕реЗ рднреА рдпрджрд┐ .. рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ _range_ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрд▓рди рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред start:stop ред

рдПрдХ рдЖрдЦрд┐рд░реА рдкрдВрдЯ: .: рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреНрдпрд╛ ab, a, (b), a? (: B) _and_ a.:b рд╣реЛрдирд╛ рдмрд╣реБрдд рд╕реВрдХреНрд╖реНрдо рд╣реИ?

@hayd , рдЬреЛ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рднреА рд╕реВрдХреНрд╖реНрдо рдФрд░ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред

@ рдЬрд┐рдСрдирд░реНрдЯрди , рдХреНрдпрд╛ # 5848 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рд╣реИ? рд╣рдо рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╢реНрди рдкрд░ рдкрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдлрд╝реАрд▓реНрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП Core.getfield(x, Field{y}) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓рдЧрднрдЧ Core.getfield рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпрд╛ рдХреЛрдИ рдареЛрд╕ рдкреНрд░рд╢реНрди рд╢реЗрд╖ рд╣реИрдВ?

# 5848 рдореЗрдВ, @tknopp рдХреЗрд╡рд▓ "рдЕрд╕рд▓реА" рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ overloadable, рдХрд┐ рд╕рдм рдХреБрдЫ overloadable рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП @JeffBezanson рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрдирд╛рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рджреЗрдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рдХрд░ рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рднрд╛рд╖рд╛ рдХреА рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХреГрддрд┐ рд╢рд╛рдпрдж рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛ рджреЗрдЧреАред рдЬреИрд╕реЗ "рд╕рдм рдХреБрдЫ-рдЕрдзрд┐рднрд╛рд░" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ x::Vector{Any} , рддреЛ x[i].y getfield(x[i], Field{:y}) рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдкреНрд░реЗрд╖рдг рдкреНрд░рдгрд╛рд▓реА y рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╣реА рдХрд╛рдо рдХрд░реЗрдЧреАред getfield "рдЖрднрд╛рд╕реА" рдХреНрд╖реЗрддреНрд░реЛрдВ рддреЛ codegen рдХреЗ рдХреНрд░рдо рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рд▓рдШреБ рд╕рдмрд╕реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреЗ рд▓рд┐рдП x[i] рдкреНрд░рдХрд╛рд░ред

рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рдерд╛ рдХрд┐ рдХреНрдпрд╛ Module.foo рдЕрдзрд┐рднрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рддрд░рдл, рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП getfield рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрд░реЛрдХреНрдд Vector{Any} рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Module рд╕рд░рдгреА рд╕рджрд╕реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рд╡реИрд╕реЗ рднреАред рджреВрд╕рд░реА рдУрд░ @JeffBezanson рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рди рдХреЛ рдХрдард┐рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ function Base.sum(...) рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрдард┐рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ Module.foo рдиреЙрди-рдУрд╡рд░рд▓реЛрдбреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреА рд╣реЛрдЧреА, рдХрдо рд╕реЗ рдХрдо рдЕрдм рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Module (рдпрд╛рдиреА Vector{Any} ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ; рдереЛрдбрд╝рд╛ рдЕрд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред

+1 Module.foo рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣рд╛рдВ рдЭрдВрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬрд╣рд╛рдВ рдУрдУ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдлрдкреА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдПрдЬреЗрдВрдЯ рдЖрдзрд╛рд░рд┐рдд рдореЙрдбрд▓рд┐рдВрдЧ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрдЬреЗрдВрдЯ рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареЛрд╕ рдФрд░ рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдпрд╛рдж рдЖрддреА рд╣реИ, рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд╣рд▓реНрдХреЗ рдФрд░ рддреЗрдЬ рдЕрдореВрд░реНрдд рдФрд░ рддреНрд╡рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЕрджреНрднреБрдд рд╣реИрдВ- рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдмреАрдПрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдиреЗ рдкреЙрдк рдЕрдк рдХрд┐рдпрд╛ рд╣реИред

ABM рдореЗрдВ, рдбреЙрдЯ рд╕рдВрдХреЗрддрди рдПрдЬреЗрдВрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ: Agent1.dosomething (Agent2) рдмрдирд╛рдо dosomething (Agent1, Agent2)ред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдмреАрдПрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЪреАрдиреА рдХреЛ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЗрд╕ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдирд╛ рднреА рдмрд╣реБрдд рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЬреИрд╕рд╛
рдЬрд┐рддрдирд╛ рдореИрдВ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдЙрдиреНрдореБрдЦ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ
рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп, рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдФрд░ рдХрдИ рдореЗрдВ рдкрдардиреАрдп рд╣реИ
рдбреЛрдореЗрдиред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ Ab (C) b (A, C) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдЕрдкреНрд░реИрд▓ 22, 2015 8:50 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░, "datnamer" рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдпрд╣рд╛рдВ рдкрд░ рдЭрдВрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬрд╣рд╛рдВ рдУрдУ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИ
рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ FP рдЖрдзрд╛рд░рд┐рдд рдПрдЬреЗрдВрдЯ рдЖрдзрд╛рд░рд┐рдд рдореЙрдбрд▓рд┐рдВрдЧ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ
рдПрдЬреЗрдВрдЯ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареЛрд╕ рдФрд░ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ, рдФрд░
рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд╣рд▓реНрдХреЗ рдФрд░ рддреЗрдЬ рдЕрдореВрд░реНрдд рдФрд░ рддреНрд╡рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ
рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ- рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдмреАрдПрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдиреЗ рдкреЙрдк рдЕрдк рдХрд┐рдпрд╛ рд╣реИред

ABM рдореЗрдВ, рдбреЙрдЯ рд╕рдВрдХреЗрддрди рдПрдЬреЗрдВрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ:
Agent1.dosomething (Agent2) рдмрдирд╛рдо dosomething (Agent1, Agent2)ред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рдПрдмреАрдПрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/1974#issuecomment -95218555

ABM рдореЗрдВ, рдбреЙрдЯ рд╕рдВрдХреЗрддрди рдПрдЬреЗрдВрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ: Agent1.dosomething (Agent2) рдмрдирд╛рдо dosomething (Agent1, Agent2)ред

рдХреНрдпреЛрдВ рдмреЗрд╣рддрд░ рд╣реИ? рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореЗрд░рд╛ рдорддрд▓рдм рдЗрд╕ рдПрдмреАрдПрдо-рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИред

рдХреГрдкрдпрд╛, рдЖрдЗрдП рд╡рд░реНрддрдиреА рдкрд░ рдзрд╛рд░реНрдорд┐рдХ рдпреБрджреНрдзреЛрдВ рдореЗрдВ рдЪреВрд╕рд╛ рди рдЬрд╛рдПред @ dbeach24 , рдХреЛрдИ рднреА рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ a.b(c) рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ b(a,c) рдмрд░рд╛рдмрд░ рд╣реЛ; рдпрд╣ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЗрдВрдЯрд░реЛрдк рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд▓реЛрдбреЗрдмрд▓ рдбреЙрдЯреНрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

Subject.Verb (DirectObject)

рдХрдИ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдХрд╛рдлреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ OO рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╣, рдФрд░ рдЬрдмрдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди (рдП, рдмреА) рдХрд╛ рдПрдХ рдорд╛рддреНрд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ
рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, IMOред
рдЕрдкреНрд░реИрд▓ 22, 2015 10:32 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░, "рдПрдВрдбреА рд╣реЗрдбрди" рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

ABM рдореЗрдВ, рдбреЙрдЯ рд╕рдВрдХреЗрддрди рдПрдЬреЗрдВрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ:
Agent1.dosomething (Agent2) рдмрдирд╛рдо dosomething (Agent1, Agent2)ред

рдХреНрдпреЛрдВ рдмреЗрд╣рддрд░ рд╣реИ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/1974#issuecomment -95256390ред

рдореИрдВ рдЙрд╕реЗ рдкреНрд░рдкреЛрдЬ рдХрд░ рд░рд╣рд╛ рдерд╛ред (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рдпреБрджреНрдз рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдирд╣реАрдВ рдерд╛, рди рд╣реА рдореБрдЭреЗ рдкрддрд╛ рдерд╛
рд╕реБрдЭрд╛рд╡ рдЕрд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрдЧрд╛ред) рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЖрдпрд╛ рджреЗрдЦреВрдВрдЧрд╛
рдордВрдЪреЛрдВ рдореЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ред рдореИрдВ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реВрдБ рдХреНрдпреЛрдВ? (рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдПрдХ рд╕реВрддреНрд░ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?)

рдзрдиреНрдпрд╡рд╛рджред
22 рдЕрдкреНрд░реИрд▓, 2015 11:09 рдмрдЬреЗ, "рд╕реНрдЯреАрд╡рди рдЬреАред рдЬреЙрдирд╕рди" рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдХреГрдкрдпрд╛, рдЖрдЗрдП рд╡рд░реНрддрдиреА рдкрд░ рдзрд╛рд░реНрдорд┐рдХ рдпреБрджреНрдзреЛрдВ рдореЗрдВ рдЪреВрд╕рд╛ рди рдЬрд╛рдПред @ dbeach24
https://github.com/dbeach24 , рдХреЛрдИ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ ab (c) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ b (a, c) рдХреЗ рдмрд░рд╛рдмрд░; рдпрд╣ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реБрдЪрд╛рд░реВ рдЗрдВрдЯрд░реЛрдк рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд▓реЛрдбреЗрдмрд▓ рдбреЙрдЯреНрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдпрд╣реА рдХрд╛рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/1974#issuecomment -95266671ред

рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ a.b b a рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ b рдЕрдХреЗрд▓реЗ b рджрд┐рдЦрддрд╛ рд╣реИ рдШреЗрд░рд╛ рдЧреБрдВрдЬрд╛рдЗрд╢ред рдпрд╣ рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдмрд┐рдВрджреАрджрд╛рд░ рдкрд╣реБрдВрдЪ рдХрднреА-рдХрднреА рдмрд╛рдИрдВ рдУрд░ рдХреА рд╡рд╕реНрддреБ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреАред

Btw, рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдЬреЛ рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред

@toivoh , рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореМрдЬреВрджрд╛ рдкрджреНрдзрддрд┐ рдкреНрд░реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ @ dbeach24 , рдЕрдВрдзрд╛рдзреБрдВрдз a.b(c) рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рди рдХрд░рдиреЗ рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ, рддреЛ рднрд╛рд╖рд╛ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрддрдиреА рдФрд░ рдЫрдбрд╝реА рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдПрдХрд╛рдзрд┐рдХ рдкреНрд░реЗрд╖рдг рдХреЗ рдкрдХреНрд╖ рдореЗрдВ b(a,c) рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ b "рд╕реНрд╡рд╛рдорд┐рддреНрд╡" рдирд╣реАрдВ рд╣реИ рджреНрд╡рд╛рд░рд╛ a - b(a,c) рдкрджреНрдзрддрд┐ _both_ a рдФрд░ c рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рдмреЗрд╢рдХ, рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрдкрд╡рд╛рдж рдкрд╛рдпрдерди рдпрд╛ рд╕реА ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЬрд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рджрд░реНрдкрдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред (рддрд╛рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЛрдЧ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╕реАрдзреЗ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХреЗрдВ, рдмрд┐рдирд╛ рдЬреНрдпрд╛рджрд╛ рдмрджрд▓реЗред)

рдХреНрдпрд╛ рдореИрдВ рд╕рдм рдЧреАрд▓рд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдЕрдм (arg) рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдирд╛рдо рдлрд╝реАрд▓реНрдб рдХреЗ рдмреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдлрд┐рд░ рджрд┐рдП рдЧрдП рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ?

рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

22 рдЕрдкреНрд░реИрд▓, 2015 рдХреЛ рд╢рд╛рдо 5:06 рдмрдЬреЗ, рд╕реНрдЯреАрд╡рди рдЬреАред рдЬреЙрдирд╕рди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдмрд╛рд╣рд░реА

@ScottPJones рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рд╢реИрд▓реА рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╢реИрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдереА рдпрд╛ рдирд╣реАрдВ, рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЪреВрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд░реНрде рдерд╛, рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдЕрдиреБрд░реВрдк рдерд╛ (рдЕрд░реНрдерд╛рдд, рдЦреЗрддреЛрдВ рдореЗрдВ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛), рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реНрдХ рдерд╛ _not_ to ab (arg) рдХреЗ рдЙрдкрдЪрд╛рд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ b (a, arg) рдерд╛ред
I _might_ рдХреЗ рдкрд╛рд╕ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ (рдкреНрд░рдХрд╛рд░) рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдЙрди рдкрд░ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ...
рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ "рдЬреВрд▓рд┐рдпрди" рд╢реИрд▓реА рдХреНрдпрд╛ рд╣реЛрдЧреА?

рдзрдиреНрдпрд╡рд╛рдж!

@ScottPJones рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордЭреМрддрд╛ рд╣реИ рдпреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП *ред

"рд╢реИрд▓реА" рдирд┐рдпрдо рдХреЗ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдорд╛рдорд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рднреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрди рд╡рд┐рд▓реА-рдирд┐рд▓реА / рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП / рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ) ...

99% + рдЙрд╕ рд╕рдордп рдЯрд╛рдЗрдкрдСрдлрд╝ (рдП) рдкрд░ рднреЗрдЬрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ; рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди-рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ, рдХреЛрдИ рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдирд╣реАрдВред

* _рдЬрдм рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреВрд╕рд░реА рднреВрдорд┐ рд╣реИ рдЬреЛ рдПрдХ рдкреИрдХреЗрдЬ рд╣реЛрдЧрд╛ рдЬреЛ рдмрд╕ ...

рдбреА рдореЗрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ a.b(arg) рд▓рд┐рдП рдПрдХ рдирд╛рдо "рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕" рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдиреЗрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди, рдПрдХрд╛рдзрд┐рдХ рдкреНрд░реЗрд╖рдг рддрд░реАрдХрд╛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╣реИред рдпрджрд┐ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдлрд╝рдВрдХреНрд╢рди рдЕрдирд╛рдо рд╣реИрдВ рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрддрдЦ-рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдЖрдИрдПрдордУ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреНрд▓рд╛рд╕-рдмреЗрд╕реНрдб рдЯреНрд░реЗрдбрд┐рд╢рдирд▓ OO рд▓реИрдВрдЧреНрд╡реЗрдЬреЗрдЬ рдХреА рдЖрджрдд рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрдВрдкреЛрдЬрд┐рдЯ рдЯрд╛рдЗрдк рдХреЗ рдЕрдВрджрд░ рдлрдВрдХреНрд╢рди рдлреАрд▓реНрдбреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдХрд╛рд░рдг рд╣реИред рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╕реНрдерд╛рди рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рд╕реЗ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо "рдареЛрд╕ рд╕рд╡рд╛рд▓реЛрдВ" рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реЛ рдЧрдП рд╣реИрдВред рдореИрдВ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рднреА рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рд╣рдо рдУрд╡рд░рдлреАрд▓реНрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЧреЗрдЯрдлреАрд▓реНрдб рдХреЛ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ "рдЕрд╕рд▓реА рдЧреЗрдЯрдлреАрд▓реНрдб" рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

@stevengj : рд╣рд╛рдБ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣ рд░рд╣рд╛ рдерд╛, рдпрд╣ рдПрдХ рдореМрд▓рд┐рдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХрд┐ a.b(c) b(a, c) рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдо рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдб рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВ рдЕрдиреНрдпрдерд╛ ред

рдЗрд╕ рдкрд░ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХреЛ рдЫреВрдиреЗ рдкрд░ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реБрдИред рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЗрд╕ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреЛрд╕реНрдЯ (@nalimilan рджреНрд╡рд╛рд░рд╛) рд╣реИ: https://groups.google.com/d/msg/julia-users/yC-sw9ykZwM/-607E_FPtl0J

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреАрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @johnmyleswhite рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ - рдпрд╣ рдореБрдЭреЗ рд╣рдорд▓рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ HTTP рд╡рд┐рдЪрд╛рд░ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд┐ getfield() рдХрд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ setfield!() рдПрдХ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрд░реНрдерд╛рдд, рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдХрдард┐рди рдФрд░ рддреЗрдЬ рдирд┐рдпрдо рдЬреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рдЧрд▓ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореИрдВрдиреЗ рд╕реВрдЪрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдХрд╕реНрдЯрдо рд╕реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
рдкреЛрд╕реНрдЯ: https://groups.google.com/forum/# .topic/julia -users / _I0VosEGa8o
рдХреЛрдб: https://github.com/barche/CppWrapper/blob/master/test/property.jl

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реЗрдЯрдлреАрд▓реНрдб рддрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП! рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдпрд╛ рдпрд╣ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддрдирд╛рд╡ рд╣реИ?

рдореИрдВ getfield / setfield! рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ, рдореБрдЭреЗ рдЦреЗрдж рд╣реИ рдЕрдиреНрдпрдерд╛ред (рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╖рдп https://groups.google.com/forum/# тАЛтАЛ.topic/julia-users/ThQyCUgWb_Q рдкрд░ рдЖрдпрд╛ рдерд╛)

рдЬреВрд▓рд┐рдпрд╛ getfield / setfield рдХреЗ рд╕рд╛рде! рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдПрдХ _external рдкреИрдХреЗрдЬ_ рдореЗрдВ рдСрдЯреЛрд░реИрд▓реЛрдПрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред (рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрдбрд╝реА рдореЗрд╣рдирдд рджреЗрдЦреЗрдВ рдЬреЛ IPython autoreload рдПрдХреНрд╕рдЯреЗрдВрд╢рди https://ipython.org/ipython-doc/3/config/extensions/autoreload.html рдореЗрдВ рдбрд╛рд▓рдиреА рдереАред рдСрдЯреЛрд░реИрд▓реЛрдПрдб рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЖрд░рдИрдкреАрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

TLDR: getfield / setfield! рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ, рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдФрд░ https://github.com/malmaud/Autoreload.jl рдХреЗ рд╕рдорд╛рди рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдСрдЯреЛрд░реИрд▓реЛрдПрдб.рдЬреНрд▓ рдХреЗ рд╕рдорд╛рди рдкреИрдХреЗрдЬ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред

module M
type Foo
  field1::Int64
end
bar(x::Foo) = x.field1 + 1.0
end

REPL рдореЗрдВ, рдЖрдк рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ

julia> using Autoreload2
julia> arequire("M")
julia> foo = Foo(42)

рдлрд┐рд░ рдЖрдк рдПрдо.рдПрд▓рдПрд▓ рдХреЛ рдмрджрд▓ рджреЗрдВ

module M
type Foo
  field1::Int64
  field2::Float64
end
bar(x::Foo) = x.field1+x.field2

рдпрд╣ рд╕реНрд╡рддрдГрдкреВрд░реНрдг рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛

# type redefinition removed as already done by Autoreload.jl
const field2_dict = Dict{UInt64,Float64}()
setfield!(x::Foo, ::Field{:field2}, value) = field2_dict[object_id(x)] = value
getfield(x::Foo, ::Field{:field2}) = field2_dict[object_id(x)]
<strong i="25">@do_not_inline</strong> bar(x::Foo) = x.field1 + x.field2

рдФрд░ рдлрд┐рд░ REPL рдореЗрдВ рдЖрдк рдХрд░ рд╕рдХрддреЗ рдереЗ

julia> foo.field2 = 3.14
julia> println(bar(foo)) # prints 45.14

рдкреНрд░рджрд░реНрд╢рди рдкрд╛рдЗрдерди рд╕реЗ рднреА рдмрджрддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЬреЛ рд▓реЛрдЧ IPython autoreload рд╕реЗ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдПрдВрдЧреЗред рдФрд░ рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк REPL рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВред

рдореИрдВ a[:field][:field2][:morestuff](b[:random_stuff]) рд▓рд┐рдЦрдиреЗ рд╕реЗ рдердХ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдЫреЛрдЯреЗ рдореИрдХреНрд░реЛ рдХреЛ рд▓рд┐рдЦрд╛ рдЬреЛ 0.4 рдФрд░ 0.5 рдореЗрдВ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
https://github.com/sneusse/DotOverload.jl

рдЯреА рдПрд▓; рдбреЙ
рдПрдХ рдореИрдХреНрд░реЛ рдЬреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдПрд╕рдЯреА a.b -> getMember(a, :b) рдмрджрд▓рддрд╛ рд╣реИ

0.6 рд╕реЗ рд╣рдЯрд╛рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред

@ рдХреЗрдиреЛ : рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ?

рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @StefanKarpinski рдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЬреВрд▓рдк рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ fieldname(object) рдпрд╛ get_fieldname(object) рдЬреИрд╕реЗ getter рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ object.fieldname рдЕрдЪреНрдЫреЗ рдорд┐рд▓реЗред рд╢рд╛рдпрдж object.fieldname (рдпрд╛ object$fieldname ) getpublicfield (рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде) рдФрд░ object..fieldname рд╡рд╛рд╕реНрддрд╡рд┐рдХ getfield рд╣реЛрдиреЗ рдХреА рдХреЙрд▓ рд╣реЛ рд░рд╣реА рд╣реИред (рдкреНрд░рд╛рдЗрд╡реЗрдЯ) рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЧреЗрдЯрд░реНрд╕ рдХреЗ рдмрдЬрд╛рдп getpublicfield рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ object.fieldname рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рдирд┐рдЬреА рд╣реИ (рдпрд╣ рдирд┐рдЬреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ getpublicfield )ред

рдореИрдВрдиреЗ рдирд┐рд░реНрдгрдп рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рд╛ред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдпрд╛ рддреЛ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред # 5848 рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдРрд╕рд╛ рд▓рдЧрд╛ рдХрд┐ @JeffBezanson @StefanKarpinski рдФрд░ @stevengj рдпрд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рд╛рдБ рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕реЗ рднреБрд▓рд╛рдпрд╛ рди рдЬрд╛ рд╕рдХреЗред рдирд╣реАрдВ рддреЛ рдкрд╛рд╕ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрджрд▓рд╛рд╡ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░реА 1.0 рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@JeffBezanson рдФрд░ рдореИрдВ рдХрд▓ рд╣реА рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рдереЗред рддрдореНрдмреВ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖: (i) рд╣рд╛рдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; (ii) Module (рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдХреЗ рд▓рд┐рдП рдбреЙрдЯ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ; (iii) Core.getfield рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЖрдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдПрдХ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рднрд╛рд░ getfield рдХреА рдХреЛрдИ рджрдмрд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдмрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдПрдХ рдЕрдВрдбрд░рд╕реНрдХреЛрд░)ред

@stevengj : рдПрдХ рдЙрдЪрд┐рдд рдпреЛрдЬрдирд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХрд▓ рддрд░реНрдХ рддрдХ рд╕реАрдорд┐рдд рд░рд╣реЗрдЧрд╛ рдпрд╛ рдпрджрд┐ рдмрд╣реБ рддрд░реНрдХ рд╕рдВрд╕реНрдХрд░рдг a.fieldname(b) рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдЪрд░реНрдЪрд╛ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ (1.0?) рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рд▓реЗрдмрд▓ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж!

рдЬреЗрдл рдФрд░ рдореИрдВрдиреЗ рдорд▓реНрдЯреА-рдЖрд░реНрдЧ рдХреЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреАред рдореЗрд░реА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдиреЛ-рдЖрд░реНрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред

рдореИрдВ рдПрдХ рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдбрд╛рд▓рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕ рддрд░рд╣:

abstract AbstractAge{T}
abstract AbstractPerson
type PersonAge <: AbstractAge{AbstractPerson} 
    value::Int64
end

Base.convert(t::Type{AbstractAge{AbstractPerson}}, value::Int64) =  begin
  if value < 140 && value > 0
    PersonAge(value) 
  else
     throw(ErrorException("ValueError"))
  end
end

type Person <: AbstractPerson
  age::AbstractAge{AbstractPerson}
end 

a = Person(32)
a.age = 67

рдпрд╣рд╛рдБ рдЗрд╕ рдХрд╛ рдПрдХ рдордЬреЗрджрд╛рд░ 3-рд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

diff --git a/base/boot.jl b/base/boot.jl
index cd3ae8b..a58bb7e 100644
--- a/base/boot.jl
+++ b/base/boot.jl
@@ -266,6 +266,9 @@ Void() = nothing

 (::Type{Tuple{}})() = ()

+struct Field{name} end
+(::Field{f})(x) where {f} = getfield(x, f)
+
 struct VecElement{T}
     value::T
     VecElement{T}(value::T) where {T} = new(value) # disable converting constructor in Core
diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm
index b4cb4b5..59c9762 100644
--- a/src/julia-syntax.scm
+++ b/src/julia-syntax.scm
@@ -1685,7 +1685,7 @@
     (if (and (pair? e) (eq? (car e) '|.|))
         (let ((f (cadr e)) (x (caddr e)))
           (if (or (eq? (car x) 'quote) (eq? (car x) 'inert) (eq? (car x) '$))
-              `(call (core getfield) ,f ,x)
+              `(call (new (call (core apply_type) (core Field) ,x)) ,f)
               (make-fuse f (cdr x))))
         (if (and (pair? e) (eq? (car e) 'call) (dotop? (cadr e)))
             (make-fuse (undotop (cadr e)) (cddr e))

рдореЗрд░реА рд╕реЛрдЪ рд╣реИ рдХрд┐ рд╣реИ a.b рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕рдорд╛рд░реЛрд╣ рдмреБрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП Field{:b}() рдХреЗ рдмрдЬрд╛рдп getfield , рддрд╛рдХрд┐ рдЖрдк рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдорд┐рд▓ x->x.a рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реАред рдпрд╣ рднреА getfield рдХреЛ рд╣рдореЗрд╢рд╛ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдорддрд▓рдм рджреЗрддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ (sysimg + 5%, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рдХреА рддрд░рд╣ рд╣реИ) рдкрд░ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╡рд╛рд▓реЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдХреБрдЫ рд╢реБрд░реБрдЖрддреА рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЧреБрдЬрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рд╢рдмреНрджрд╛рд░реНрдердХ рдореЙрдбреНрдпреВрд▓ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбреЗрди рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ? рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рдмрдирд╛ рджреЗрдЧрд╛ (рдЧрддрд┐ рдФрд░ рд╕реНрдореГрддрд┐)ред рдпрд╣ sysimg рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрдирдлреЗрдХреНрд╢рди рдХрд╛ рдЦрд╝рддрд░рд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ sysimg рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдЗрд╕рд▓рд┐рдП 5% рдмрджрддрд░ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рдХреА рддрд░рд╣ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ]

рд╣рд╛рдВ, GlobalRefs рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jl_resolve_globals рдореЗрдВ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдХреЛ рдЗрдирдмрд┐рд▓реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдХреЛрдбрдЧреЗрди рдХреЗ рд▓рд┐рдП рдЗрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛред рдЕрдиреБрдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ getindex tuple рдХреЗ рд╕рдорд╛рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ tuple getindex рдХреЗ рд╕рдорд╛рди рд╣реИ

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рддрд░реАрдХрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдмрд┐рд▓рд┐рди getindex рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдБ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ ::Module рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐

@JeffBezanson рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрди рддреАрди рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рд╛рдЦрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХреЛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдЕрдм рддрдХ рд╕рд╛рде рдЪрд▓реА рдЧрдИ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред

рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреВрд▓рд┐рдпрд╛ 1.0 рдореЗрдВ рдПрдХ рдлреАрдЪрд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЗрдЪреНрдЫрд╛ рдереА, рддреЛ рдпрд╣ рдпрд╣реА рд╣реЛрдЧрд╛ред рдпрд╣ рдореАрдореА рдФрд░ рдХреНрд╡реЗрд░реА рджреЛрдиреЛрдВ рдореЗрдВ рджреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕рдХреЗ рд╕рд╛рде NamedTuple рдлрд╝реАрд▓реНрдб рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЙрддреНрдкрдиреНрди рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЧрдгрдирд╛ рдХреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЭреЗ Blackrock / NamedTuples.jl # 4 рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░-рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ рдЕрднреА Query.jl рдореЗрдВ рдореЗрд░рд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдареЛрдХрд░ рд╣реИред

рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдЫреЛрдЯреА, рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╣рд╛рдиреА рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░, рд╕реБрдкрд░ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧреАред

рд╕рд┐рдВрдЯреИрдХреНрд╕ рдиреАрдЪреЗ рдЙрдкрд▓рдмреНрдз рд╣реИ?

function (obj::MyType).plus(n::Int)
       return obj.val + n
end

рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдк рдЙрд╕ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдХреНрдпреЛрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ?

рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реИрдВ obj.plus(n) рдХреЗ рдмрдЬрд╛рдп obj + n рдХреБрдЫ рдЧрдВрднреАрд░ рдК рд╕реНрдЯреЙрдХрд╣реЛрдо рд╕рд┐рдВрдбреНрд░реЛрдо рд╣реИред

рдареАрдХ рд╣реИ, рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рддреБрдЪреНрдЫ (рдФрд░ рдПрдХ рдмреБрд░рд╛) рдерд╛ред
рдпрд╣ getfield рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдФрд░ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред getfield рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдмрд╣реБрдд рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░рдиреЗ рд╕реЗ рдкреАрдЫреЗ рдирд╣реАрдВ рд╣рдЯрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, getfield рдФрд░ setfield! рд╕реАрдзреЗ рджрд░реНрдкрдг getindex рдФрд░ setindex! рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдПрдХ OO рд╢реИрд▓реА рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдореБрд╣рд╛рд╡рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ OO рдЬреИрд╕реА рд╡рд┐рдзрд┐-рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдКрдкрд░ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдИ рдПрдХ рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ $ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ $(x, sym::Symbol) = ... рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХреБрдЫ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рднреА рдПрдХ рдХрдЯреНрдЯрд░рдкрдВрдереА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

x$y          => $(x, ::Type{Val{:y}})
x$z(args...) => $(x, ::Type{Val{:z}}, args...)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрддрд╛рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ . рдСрдкрд░реЗрдЯрд░ рдмрд╣реБрдд рд╢рдмреНрджрд╛рд░реНрде рд╕реЗ рд╕рдВрддреГрдкреНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдХреБрдЫ рдкрдЪрд╛рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

@quinnj , рдкрд╣рд▓реЗ рд╕реЗ рд╣реА # 18696 рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред

рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ . , рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рджреЛ рдлреАрд▓реНрдб-рдПрдХреНрд╕реЗрд╕-рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рдУрд╡рд░рд▓реЛрдбреЗрдмрд▓ рдФрд░ рдПрдХ рдирд╣реАрдВред рдФрд░ рдпрд╣ рдкрд╛рдпрдерди рдФрд░ рдЕрдиреНрдп OO рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░-рднрд╛рд╖рд╛ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реЛрдЧрд╛, рдЬреЛ рд▓рдЧрднрдЧ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ . ред

рдореИрдВ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░рдкреНрд░рд╛рдВрддреАрдпрддрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред рдпрд╣ рдХрд╣рдиреЗ рдХреА рддрд░рд╣ рд╣реИ, "рдкрд╛рдпрдерди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рдпрдерди рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред" рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдФрд░ / рдпрд╛ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛ рджреЗрдЧрд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдУрдУрдкреА-рд╢реИрд▓реА x.f() рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдЙрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реИред

@stevengj , рдЬрд╣рд╛рдВ рд╕реЗ рдореИрдВ рдЖ рд░рд╣рд╛ рд╣реВрдВ, рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ x.f _is't_ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ред рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рд╕рджрд╕реНрдп f ред рдпрд╣ рдкреВрд░рд╛ рдорд╛рдорд▓рд╛ рдЧреЗрдЯрдлреАрд▓реНрдб рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛рдПрдВ рд╕рдВрднрд╛рд╡рд┐рдд рднреНрд░рдо рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ x.f рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╣реБрдб рдХреЗ рддрд╣рдд рдХреБрдЫ рдФрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд░реАрд░рд╛рдЗрдЯ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЧреЗрдЯрдлреАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рднреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХрд┐рдП рдмрд┐рдирд╛ рднрд╛рд╖рд╛ рдЗрдВрдЯрд░реЛрдк рдХрд╣рд╛рдиреА рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ; рдЬрдм рдореИрдВ . рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рдерд╛, рддреЛ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддрд╛ рдерд╛ рдХрд┐ рд╡рд╣ рдЕрдзрд┐рдХ рд╕рдВрддреГрдкреНрдд рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ x$f рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛? рдореИрдВ рдЕрднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ _has_ рдбреЙрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдЧреЗрдЯрдлреАрд▓реНрдб рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛рдПрдВ рд╕рдВрднрд╛рд╡рд┐рдд рднреНрд░рдо рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ x.f рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╣реБрдб рдХреЗ рддрд╣рдд рдХреБрдЫ рдФрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @JeffBezanson рдХреЗ рддреАрди рд▓рд╛рдЗрди рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рднреНрд░рдо рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ: a.b рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдЙрддрд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрднреА рднреА getfield рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ред рдФрд░ рдлрд┐рд░ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ / рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ getfield рдХреЙрд▓ рдХрд░рддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣реЗрдВред getfield рд╣рдореЗрд╢рд╛ рдЙрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдкрд╣реБрдВрдЪ рдХрд╛ рдорддрд▓рдм рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ getfield рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк "рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдЧреЗрдЯрдлреАрд▓реНрдб" рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ)ред рдЬреЛ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рдл рд▓рдЧрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрднреА рднреА рдореЗрдЬ рдкрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреБрдЫ рд╕рдВрдХрд▓рдХ рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИрдВ :)

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ (рдореИрдВ рдЗрд╕реЗ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ)ред рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЖрдИрдПрдордПрдЪрдУ рд╕реАрдзреЗ рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдмрд╣реБрдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ (рддреБрд▓рдирд╛ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдХреНрд╖рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдмрд╕рдиреЗ рдХрд╛ рдЬрд╛рд╡рд╛ рддрд░реАрдХрд╛)ред рд▓реЗрдХрд┐рди "рд╡рд░реНрдЪреБрдЕрд▓" рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ / рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ v2.0 рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ v1.0 рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкреИрдХреЗрдЬ / рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧреАред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХреНрд╕реЗрд╕рд░ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкреИрдХреЗрдЬ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдХреНрд▓реАрдирд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреАред рдореИрдиреЗ рддрд░реНрдХ рдХрд┐рдпрд╛ рдерд╛ рдХреА,

complex_data_structure.attribute

рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ

get(complex_data_structure, :attribute)

рдЬрд╣рд╛рдВ get рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ :attribute рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рд╕рдВрднрд╡рддрдГ REPL рдореЗрдВ рдЦреЛрдЬ рдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рднрд╛рд╖рд╛ рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХреЛ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рд╕реЗрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рднреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реА рдХрдИ рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ :),),

set(complex_data_structure, :attribute, modify_attribute(get(complex_data_structure, :attribute), additional_arguments))

рдпрджрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЧреЗрдЯреНрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЙрдкрд░реЛрдХреНрдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрди рдЬрд╛рдПрдЧрд╛ред

complex_data_structure.attribute = modify_attribute(complex_data_structure.attribute, additional_arguments)

рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИред (рд╕рд┐рдбреЗрдиреЛрдЯ: рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рдЗрдк рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди additional_arguments рдлрд┐рд░ рд╕реЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдФрд░ рдпрд╣рд╛рдБ рддрд░реНрдХ рдЕрднреА рднреА рдЦрдбрд╝рд╛ рд╣реЛрдЧрд╛ред)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдпрд╣ v1.0 рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореЗрд░реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ (рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдЧрд▓рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ)?

module point

mutable struct Point
    x::Int
    y::Int
    function Point(x, y)
        if x < 0 || y < 0
            throw(error("Only non-negative values allowed"))
        end
        this = new(x, y)
    end
end

end
# point

p1 = point.Point(-1, 0)
# Only non-negative values allowed

# Stacktrace:
# [1] point.Point(::Int64, ::Int64) at ./In[30]:8
# [2] include_string(::String, ::String) at ./loading.jl:515

p1 = point.Point(0, 0);
p1.x = -1;
p1
# point.Point(-1, 0)

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдбреЛрдореЗрди рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдорд╛рдиреНрдп рдорд╛рди рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рд╣рдпреЛрдЧреА рдФрд░ рдмрд╕рдиреЗ рд╡рд╛рд▓реЗ рдпрд╣рд╛рдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рд╡реИрдзрддрд╛ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рддрддреНрдХрд╛рд▓ рдмрдирд╛ рджреЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреНрд▓реАрдирд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рджреЗрдЧрд╛ред

рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрдХреАрдирди рдмреЗрд╣рддрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП PyCall.jl рдФрд░ DataFrames.jl рдЬреИрд╕реЗ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рднреА рдмрд╣реБрдд рд▓рд╛рдн рджреЗрдЧрд╛ред рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╣реЛрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╡реНрдпрдХреНрдд рдХреА рд╣реИред

рд╡рд┐рдЪрд╛рд░? рдзрд╛рдЧреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдирд╛, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрддрд┐рдо рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦрдХ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рд╣реИрдВ?

рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд┐рд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдореИрдХреНрд░реЛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/bramtayl/DotOverloading.jlред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдзрд╛рд░ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред

@bramtayl , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @overload_dots рд╕реЗ рдкрд╣рд▓реЗ a.b рднрд╛рд╡ рд░рдЦрдирд╛ рдпрд╣рд╛рдБ рдмрд┐рдВрджреБ рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдХреНрд░реЛ рдХреЛ рдЖрдзрд╛рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП; рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд░рдгрдиреАрддрд┐ рдХреЛ рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рдореИрдХреНрд░реЛ рд╣реИ рдЬрд┐рд╕реЗ рдкреВрд░реА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдПрдХ IDE рдореЗрдВ рд╣реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ a.b рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ Expr(:., :a, :(Val{:b}()) рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд░ рджрд┐рдпрд╛ get_field_overloadable(a, Val{:b}())

@bramtayl , рдКрдкрд░ рдЬреЗрдл рдХреЗ

рдУрд╡рд░рдлрд╝реАрд▓реНрдб рдЧреЗрдЯрдлреАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИред рдЬрдм рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХреВрдВ рдФрд░ рдХрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛ рд╕рдХреВрдВ, рддреЛ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рдирд╣реАрдВ рд╣реВрдВ, рдЬреЛ рдореЗрд░реА рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рддреАрди рд╕реНрддрд░реЛрдВ рдкрд░ рдЧрд╣рд░рд╛ рд╣реИ, рддрд╛рдХрд┐ рдореИрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдПрдХ рдЙрдЪрд┐рдд рдФрд░ рддреЗрдЬреА рд╕реЗ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдореЗрд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИред

рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рдЧреЗрдЯрдлрд╝реАрд▓реНрдб рдФрд░ рд╕реЗрдЯрдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдПрдХ рдЙрдЪрд┐рдд рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рд╡рд┐рд╢рд╛рд▓ рдлрд╝рдВрдХреНрд╢рди рддрдВрддреНрд░ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреАрд╡рд░реНрдб struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ C рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЙрдореНрдореАрдж рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдЯрдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддреНрдпрдХреНрд╖ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп $ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЙрдЪрд┐рдд рд╕рдордЭреМрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреЗрдЯрдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд╣реБрдВрдЪ рдкреНрд░рддреНрдпрдХреНрд╖ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧреАред рдЬрдм рдпрд╣ рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд░ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдУрд╡рд░рдлрд╝реАрд▓реНрдб рдЧреЗрдЯрдлреАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИред

рдКрдкрд░ рд╕реЗ @JeffBezanson рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди getfield (рдпрд╛ setfield ) рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЗрд╕реЗ 1.0 рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдирд┐рд╡реЗрджрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рд▓рдЪреАрд▓рд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмреАрдЪ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдлрдЯрд╛ рд╣реБрдЖ рдкрд╛рддрд╛ рд╣реВрдВ (рдФрд░ рдлрд┐рд░ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдирд╛рдо рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдП), рдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ "рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ / рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛"ред

рдмрд╣реБрдд рд╕реЗ рдЧреЗрдЯрд░реНрд╕ рдХреА рд░рдХреНрд╖рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдирд╛ рдФрд░ рд╕рд╛рдордиреЗ рдмрд╕рдирд╛ рдореБрдЭреЗ рдмрд╣реБрдд рдЬреВрд▓рд┐рдпрди рдирд╣реАрдВ рд▓рдЧрддрд╛ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдирд┐рдЬреА / рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реАрдзреЗ рдЦреЗрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓реЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреЗрдЯреНрдЯрд░ / рд╕реЗрдЯрд░-рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдирд╛рдо рдкрд░ рд╕рд╡рд╛рд▓ рд╣реИред рдФрд░ рд╡рд┐рдХрд▓реНрдк, getfield рдФрд░ setfield! (рдпрд╛ рд╕рдорд╛рди) рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдиреЗ рдкрд░, Val{:fieldname} рдкрд░ рднреЗрдЬрд╛ рдЧрдпрд╛, рдпрд╛ рддреЛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдкреНрд░рддреНрдпрдХреНрд╖ рдХреНрд╖реЗрддреНрд░ рдкрд╣реБрдВрдЪ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдПред @JeffBezanson рдХрд╛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рджреБрд╡рд┐рдзрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред

рд░рд╛рдЗрдЯ, @davidanthoff рдореБрдЭреЗ getfield рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдФрд░ . рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╣реИред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ 1.x рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ 1.0 рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рднреА рдбрд┐рдЬрд╝рд╛рдЗрди рдпрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдПрдХ рд╣реЛред

рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЯреВ (C-) рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдкрд░ рдбреЙрдЯ-рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрддреНрдпрдВрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред

рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗрд╡рд▓ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдбреАрдИрдЖрд░рдПрдл рдХреЗ рд▓рд┐рдП [] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрддрдГ, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд▓реЛрдЕрд░рдкреЗрдпрд░ a: рдЗрдВрдЯ рдмреА :: рдЗрдиреНрдЯ рдПрдВрдб, рдФрд░ рдкреА :: рдкрдВрд░ {somepair}, рддреЛ рдкрд╛ рдПрдХ рдлреАрд▓реНрдб рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдкрд╛ [] = 3 рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдпрд╛ x = рдХреЗ рд╕рд╛рде рдкрдврд╝рддрд╛ рд╣реВрдВ рдкрд╛ []ред

рдЖрдЧреЗ рд╣рдореЗрдВ рдмрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрднрд╡рддрдГ рд╕реА рд╣реЗрдбрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реА рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдПрдХ рд╣рд╡рд╛ рдмрди рдЬрд╛рддреА рд╣реИред

Ps, рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

function getfield(p::Ptr{T}, fn::Symbol) # dispatch on values of T and fieldname
ftype = fieldtype(T, fn)
offset = fieldoffset(T,fn)
return convert(Ptr{ftype}, p+offset)
end

getindex(p::Ptr{T}) where T = unsafe_load(p)
setindex!(p::Ptr{T}, v) where T = unsafe_store!(p, convert(T,v))

рдмреЛрдирд╕ рдЕрдВрдХ рдХреЗ рд▓рд┐рдП, рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд░рдирдЯрд╛рдЗрдо рд▓реАрдм рд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреЙрдЗрдВрдЯрд░_рдлреНрд░реЙрдо_рдмреЙрдЬрдлреНрд░реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреВрдирд┐рдпрдиреЛрдВ рдХреЛ рдереЛрдбрд╝реЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП, рдмрд╕ рдПрдХ рд╣реА рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рджреЛ рдХреНрд╖реЗрддреНрд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП?

@ рдЪреЗрддрд╣реЗрдЧрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк https://github.com/JuliaLang/julia/pull/21912 рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд▓рдЧрднрдЧ рдЙрд╕реА рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ C рдХреЗ рдореЗрдореЛрд░реА рдореЙрдбрд▓ (рдЯрд╛рдЗрдк-рдкрд╛рдЗрдВрдЯрд┐рдВрдЧ рд╡реЙрдпрд▓реЗрдВрд╕, рдЖрдЙрдЯ-рдСрдл) рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдореБрджреНрджреЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ -рдмрд╛рдЙрдВрдб рдПрдХреНрд╕реЗрд╕, рдЗрдВрдЯреАрд░рд┐рдпрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ, рдЖрджрд┐, рдЬреЛ рдЙрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрднрд╡ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред

рдХреНрдпрд╛ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдЪрд╛рд░ рдХрд░рдирд╛ рдЗрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ?

Pls 1.0 рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдмрджрд▓реЗрдВ! :)

@ рд▓рд┐рд╕реЛ77 рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд┐рдЯ рдорд╛рд╕реНрдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдЧрд░ рдЧрд▓рдд рд╕рдордЭреЗ рддреЛ @nalimilan рдХреЛ рдорд╛рдлрд╝ рдХрд░рдирд╛! рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ 1.x рдХреЛ рдкреЛрд╕реНрдЯрдкреЛрди рдХреА рдЧрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ 1.0 рдХреЗ рдмрд╛рдж рд╣рд▓ рдЕрдм рд╣рд▓

рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдПрдХ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╕рдореБрджрд╛рдп рд╣реИред рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ 1.0 рд╕реЗ рдкреВрд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЬреЛ рднреА рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ 1.0 рдореЗрдВ рдРрд╕рд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ред

@ рд▓рд┐рд╕реНрдиреЛ77 рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ v1.0 рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЬреВрд▓рд┐рдпрд╛ v1.0 рд╕реБрд╡рд┐рдзрд╛ рдлреНрд░реАрдЬ рдХреА рддрд╛рд░реАрдЦ 15 рджрд┐рд╕рдВрдмрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрджреНрджрд╛ 17 рджрд┐рд╕рдВрдмрд░ рдХреЛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ 1.x рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдореЗрд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд▓рдд рд╣реИ рддреЛ рдХреЛрд░ рджреЗрд╡рддрд╛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд╣реАрдВ, рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╣реЛрдЧрд╛ред

:) рдХреБрдВрдЖ! рдореИрдВрдиреЗ рдЕрднреА рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ 1.0 рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЙрд╕реЗ рд▓реЗрдмрд▓ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ! :)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 1.0 рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП NEWS рдлрд╛рдЗрд▓ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИред

рдЗрд╕ рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдХреЛ "1.x рд░рд┐рд▓реАрдЬрд╝ рд╕реАрд░реАрдЬрд╝ рдореЗрдВ рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛" рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдХреЛрдб рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ 1.0 рдлреАрдЪрд░ рдлреНрд░реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рд╡реИрд╕реЗ рднреА рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬреЛ рдХреБрдЫ рднреА рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ 1.0 рдореЗрдВ рд╣реЛрдЧрд╛ред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рд░реЛрдорд╛рдБрдЪрдХ рд╣реИ! NEWS рдлрд╛рдЗрд▓ рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдирд╡рд░реНрдзрдХ рдереАред

рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рднреА рдмрд╣реБрдд рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ 1.0 рдореЗрдВ рдЖрдПрдЧрд╛! :)

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдСрдЯреЛ-рдкреВрд░реНрдг рдореЗрдВ рдЗрди рдирдП "рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП fieldnames рдЕрдзрд┐рднрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ред рдпрд╣ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдХрдИ рдХреЙрд▓рдо рдФрд░ / рдпрд╛ рд▓рдВрдмреЗ рдХреЙрд▓рдо рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде DataFrame s (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ df.column_name рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп REPL (рдЯреИрдм-рд╡рд┐рд╕реНрддрд╛рд░), IJulia, рдЗрддреНрдпрд╛рджрд┐ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ? рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХреЗред рд╢рд╛рдпрдж рдЬреВрдиреЛ рдЬреИрд╕реА рдЖрдИрдбреАрдИ рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЙрджрд╛рд╣рд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред

@oschulz , рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА fieldnames рдЕрдзрд┐рднрд╛рд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:


julia> struct Foo; foo; end

julia> fieldnames(Foo)
1-element Array{Symbol,1}:
 :foo

julia> Base.fieldnames(::Type{Foo}) = [:bar, :baz]

julia> fieldnames(Foo)
2-element Array{Symbol,1}:
 :bar
 :baz

рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ fieldnames рд╣реИ рдЬреЛ REPL рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ:

julia> x = Foo(3)
Foo(3)

julia> x.ba<tab>
bar baz

@yurivish рд╕рд╣реА - рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ "рд╕реБрд░рдХреНрд╖рд┐рдд" рд╣реИ? рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ fieldnames рдкрд░ рдФрд░ рдХреНрдпрд╛ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ complete_fieldnames(x) = fieldnames(x) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, REPL рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП complete_fieldnames рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдХрд╕реНрдЯрдо рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рджреЗрдВред

рд╣рд╛рдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдКрдкрд░ рд▓рд╛ рд░рд╣рд╛ рдерд╛ - рдпрджрд┐ рдЖрдзрд╛рд░ рдореЗрдВ рдХреБрдЫ рдХреЛ рдмрджрд▓рдиреЗ / рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрд░рдИрдкреАрдПрд▓ рдФрд░ рдорд┐рддреНрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рд▓рд╛рдн рд▓реЗ рд╕рдХреЗрдВред 0.7 рдлрд╝реАрдЪрд░ рдлреНрд░реАрдЬрд╝ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ...

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╣рдордиреЗ рдлрдВрдХреНрд╢рди рдХреЛ getproperty ; рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ fieldnames рдЬреИрд╕реА рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред fieldnames рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╡реИрдз рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╕рдорд╛рди propertynames рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рд╣рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж!) - рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

i-apellaniz picture i-apellaniz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

musm picture musm  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manor picture manor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

helgee picture helgee  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

omus picture omus  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ