ãã¥ãŒããŒã¿ãŒ/ã¢ã¯ã»ãµãŒã¡ãœããã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒãšããŠãããã䜿çšããæ©èœã¯ãå€ãã®å Žåã«åœ¹ç«ã¡ãŸãã APIãå£ãããšãªãæ§é ãã£ãŒã«ããããè€éãªæœè±¡åã«å€æã§ããããã«ããããæäŸããèšèªã§ãããåžžã«è©äŸ¡ããŠããŸããã
+1
ç§ã¯ãããå®è£ ããããã®çµ¶å¯Ÿã«çŽ æŽãããæ¹æ³ãæã£ãŠããŸãã
ããã«ã€ããŠè©±ãããšã«èå³ããããŸããïŒ ãã®æ©èœã䜿çšããããšã®ç¥æµã«ãŸããŸãæççã«ãªã£ãŠããŸãããTomShortãDataFramesã«ããã䜿çšããããšã«æ¬åœã«èå³ãæã£ãŠããããšãç¥ã£ãŠããŸãã
ããã¯ãçŸåšç§ãããããšãäœåãªãã ãããããªãç«æŽŸïŒPyCallçµç±ïŒPythonã³ãŒããåŒã³åºãããšã«ãªãã ãã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
å¥ã®æ¹æ³ã«ãããŸããããåé¡ã¯ãã¢ãžã¥ãŒã«åç
§ãåºæ¬çã«ã°ããŒãã«å€æ°ã®ããã«åäœãããããã¢ãžã¥ãŒã«åç
§ã_以åã«_解決ããå¿
èŠãããããšã§ãã .
åäœã§ã¯ããããç¹å¥ãªã±ãŒã¹ã«ä¿ã€å¿
èŠããããšæããŸãã ïŒïŒã¿ã€ãïŒ*ïŒïŒãã£ãŒã«ãïŒã®äœåãªé¢æ°å®çŸ©ãåæãããããã³ã³ãã€ã©ãŒã®å¹çã«é¢ããæžå¿µãå°ããããŸãã ãããããã®ããã«ã¯ãäœãèµ·ããããèŠãŠãããŸãã
@JeffBezansonã¢ãžã¥ãŒã«å
ã®const
åäœãåç
§ããŠããŸããïŒ ã¢ãžã¥ãŒã«ããšãã¥ã¬ãŒããããŠãŒã¶ãŒã¿ã€ãããããåçãã£ãŒã«ãã«ãã¯ã¢ããã®çµæãå®éã«äžå®ã§ããå Žåã«ã³ã³ãã€ã©ãŒã«éç¥ã§ãããšäŸ¿å©ã§ãã ïŒå¥ã®ã¢ãããŒãã¯ãå®éã®ã¢ãžã¥ãŒã«ããå§ããŠã倱æããjl_get_global
ãããã©ããããããªã³ããã³ãã§æ°ãããã€ã³ãã£ã³ã°ãæ¿å
¥ã§ããããã«ããããšã§ãïŒ
ïŒ5395ãšçµã¿åããããšéåžžã«äŸ¿å©ã ãšæããŸãã 次ã«ãæªå®çŸ©ã®é¢æ°ãŸãã¯ã¡ãœããMyMod.newfunction(new signature)
ãžã®åŒã³åºããã€ã³ã¿ãŒã»ãããããªã³ããã³ãã§ïŒãããã倧ããªïŒAPIãžã®ãã€ã³ãã£ã³ã°ãçæã§ããŸãã ããã¯ãç§ãæšæž¬ããéåžžã®constãã€ã³ãã£ã³ã°ãšããŠãã£ãã·ã¥ãããŸãã
åçŽãªJuliaã®åå¿è ã§ããç§ã«ãå°ãæžå¿µã瀺ããŸãããããããæŒç®åããªãŒããŒããŒãããå¯èœæ§ã¯ããã£ãŒã«ãã¢ã¯ã»ã¹ã®ãçŽåºŠããäœããã®çç±ã§å€±ãããããšãæå³ããå¯èœæ§ããããšæããŸãã
abãå®è¡ããããšãåç §/å€ãžã®åãªãã¢ã¯ã»ã¹ã§ããå ŽåããŸãã¯èåŸã§åŒã³åºããã巚倧ãªé¢æ°æ©æ§ãååšããå¯èœæ§ãããå ŽåããŠãŒã¶ãŒã¯äžè¬ã«ç¥èã倱ããŸãã ãããã©ã®ããã«æªãã®ãã¯ããããŸããããããã¯ãã ã®æ°æã¡ã§ã...
äžæ¹ã§ãããã¯å€ãã®å ŽåïŒPyCallãDataframes ...ïŒã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã«å¯Ÿãã倧ããªé¡ãã§ãããå®å
šã«ç解ã§ããŸãã
å€åããã¯..ïŒ2614ã®æéã§ããïŒ
ç§ã¯ããããµããŒãããŸãã
ããããçŽåºŠã¯ãäžã€ã¯äœ¿çšããããšãã§ãããšããŠããããã®ããã«èšãããããšããããnames(Foo)
ã®å®æ°æåããææ¡ããããã«Foo
ã
çŽåºŠã®è°è«ã¯ãç§ãæã£ãŠããäž»ãªå®éçãªæžå¿µãšå¯æ¥ã«é¢é£ããŠããŸããããã¯ãã¿ã€ãã®ãã£ãŒã«ãã䜿çšãããååãšå¹²æžããå Žåã«ãååã®ç«¶åãåŠçããæ¹æ³ã§ãã DataFramesã§ã¯ãååãšããŠã®columns
ãšcolindex
ã®äœ¿çšãçŠæ¢ããããšã§ããã解決ã§ãããšæããŸãããããã«å¯Ÿãã人ã
ã®èšç»ãç¥ããããšæããŸããã
MyType
ã«ãã£ãŒã«ãfoo
ãããå Žåã getfield(x::MyType, ::Field{:foo}) = ...
ãçŠæ¢ããå¿
èŠããããšæããŸããããããªããšãå®éã®ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ã倱ãããŸãïŒãŸãã¯ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ã匷å¶ããæ¹æ³ïŒãå©çšå¯èœã§ããå¿
èŠããããŸãïŒã
ããããæœè±¡åã¯ãã£ãŒã«ãã«ã€ããŠäœãç¥ããªãããã getfield
ã¯å
·è±¡åã«å¯ŸããŠã®ã¿å®çŸ©ã§ããŸãã
ïŒãã®éãç§ã¯C ++ã«ã€ããŠããã«åºããããŸãããïŒ
ããã¯å€§ããªåé¡ã§ã¯ãããŸããã Core.getfield(x, :f)
ãããªãã®ãæäŸããŠãå®éã®ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ã匷å¶ããããšãã§ããŸãã
ããããŸãããå€åç§ã¯å£²ãããŠããŸãã ãã ãã Core.getfield(x, :f)
ãžã®ã·ã§ãŒãã«ããïŒäŸïŒ x..f
ïŒãå®çŸ©ãããšäŸ¿å©ã§ããããã§ãªãå Žå.
ããã¹ãŠã®ã·ã³ãã«ïŒããŒã¿ãã¬ãŒã ãããããèŸæžïŒã®Core.getfield
ã§æ··éããŸãã
ç§ã¯çŽåºŠã®åŽé¢ã«ã€ããŠå¿é
ããŠããŸãã-ãããã§ãããŸã§ãå¯äžã®ã³ãŒã
ãã£ãŒã«ãã¢ã¯ã»ã¹ã䜿çšããå¿
èŠãããã®ã¯ãã«å±ããã³ãŒãã§ãã
ç¹å®ã®ã¿ã€ãã®å®è£
ã ãã£ãŒã«ãã¢ã¯ã»ã¹ãAPIã®äžéšã§ããå Žåã
ä»ã®APIãšåæ§ã«ããããææžåããå¿
èŠããããŸãã ç§ã¯ããã䟿å©ãããããªãããšã«åæããŸã
ãã ããcore.getfieldã®ã·ã§ãŒãã«ããæ§æã¯ãããããäœæãããšãã«äœ¿çšããŸãã
å®è£
ã
ïŒ4935ã§ãã§ã«ææãããŠããŸããããããã«åŒã£åŒµã£ãŠã¿ãŸããããé©åã«äœ¿çšããªããšããããã®ãªãŒããŒããŒããåŸæ¥ã®Julianå€éãã£ã¹ããããšå°ãéãªãå¯èœæ§ããããŸãã
getfieldïŒx :: MyTypeã:: Field {ïŒsize}ïŒ=........ã
i = 1ïŒy.sizeã®å Žå....ã
ã®ä»£ããã«
sizeïŒx :: MyTypeïŒ=.........ã
for i = 1ïŒsizeïŒyïŒ...ã
ãããã¯ã³ã¬ã¯ã·ã§ã³ïŒããŒã¿ãã¬ãŒã ããã£ã¯ããPyObjectsïŒã®ã¢ã€ãã ã«ã¢ã¯ã»ã¹ããã®ã«æé©ã§ããããªããžã§ã¯ãã®ããããã£ïŒãã£ãŒã«ãã§ã¯ãªãïŒãžã®ã¢ã¯ã»ã¹æ¹æ³ãäœããã®åœ¢ã§å€æŽã§ããŸãã
èæ ®ãã¹ãããšã®1ã€ã¯ãã¢ã¯ã»ã¹ãã£ãŒã«ãããªãŒããŒããŒãã§ããå Žåã¯ããã£ãŒã«ãã®_setting_ããªãŒããŒããŒãã§ããã¯ãã ãšããããšã§ãã ããã§ãªããã°ãããã¯äžè²«æ§ããªããã€ã©ã€ã©ããã§ãããã ãããŸã§è¡ã£ãŠã倧äžå€«ã§ããïŒ
@nalimilan ã setfield!
ã«å ããŠgetfield
setfield!
ã絶察ã«å¿
èŠã§ãã ïŒãšåæ§ã«setindex!
察getindex
ã«ã€ããŠ[]
ïŒã ããã¯ç©è°ãéžããšã¯æããªãã
@stevengjã«åæãsetfield!
ãå®è£
ããŸãã
ç§ã¯ãããæ¯æããŸãã
ä»ã®èšèªïŒCïŒãPythonãªã©ïŒã§ã®çµéšããããããæ§æã«ã¯å€ãã®å®çšçãªäŸ¡å€ãããããšãããããŸãã ç¹æ®ãªæ¹æ³ã§å®è£ ããæ¹æ³ã¯ãäž»ã«ããã©ãŒãã³ã¹ã®äœäžã®æžå¿µã«å¯ŸåŠããŸãã
ãã ããã¡ãœããã®_ã€ã³ã©ã€ã³åå¯èœæ§_ããã®å€æŽã«ãã£ãŠæ·±å»ãªåœ±é¿ãåããªãããã«ããããšãéèŠã§ãã ããšãã°ã 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ã¯ããããããã«ã€ããŠäœãèšããããããŸãããïŒ
ãã£ãŒã«ãã¢ã¯ã»ã¹ã¯éåžžã«äœã¬ãã«ãªã®ã§ãããã©ãŒãã³ã¹ãç¶æãããŠããããšã確èªããã«ãããè¡ãããšã¯ãããŸããã
çµå±ã®ãšããããã£ãŒã«ãã®ãªãŒããŒããŒããè¯ãèãã ãšã¯ç¢ºä¿¡ããŠããŸããã ãã®ææ¡ã§ã¯ãããããã£ãèšå®ããæ¹æ³ã¯åžžã«2ã€ãããŸãã x.property = value
ãšproperty!(x, value)
ã§ãã ãã£ãŒã«ãã®ãªãŒããŒããŒããå®è£
ãããŠããå Žåãäœæè
ãç¹å®ã®ã¿ã€ãã«å¯ŸããŠã©ã®ãœãªã¥ãŒã·ã§ã³ãéžæããããäºåã«ããããªããããªå®å
šãªæ··ä¹±ã«çµãããªãããã«ãéåžžã«åŒ·åãªã¹ã¿ã€ã«ã¬ã€ããå¿
èŠã«ãªããŸãã
ãããŠããã£ãŒã«ãããããªãã¯ããã©ã€ããŒãããšããåé¡ããããŸãã ãã£ãŒã«ãã®ãªãŒããŒããŒããèš±å¯ããªããšãåã·ã¹ãã ãæ確ã«ãªããŸãããã£ãŒã«ãã¯åžžã«ãã©ã€ããŒãã«ãªããŸãã ã¡ãœããã¯ãããªãã¯ã§ãããåã¯ãã€ã³ã¿ãŒãã§ã€ã¹/ãããã³ã«/ãã¬ã€ããå®è£ ããããšã宣èšã§ããŸããã€ãŸããç¹å®ã®ã¡ãœããã®ã»ãããæäŸããŸãã ããã¯ãSã@stevengjåããhttps://github.com/JuliaLang/julia/issues/1974#issuecomment APIãå£ãåé¿ããããã®æ¹æ³ã§ãã£ãŒã«ãããªãŒããŒããŒãã«ã€ããŠ-12083268ïŒå¯äžã®APIã®äžéšãšããŠãã¡ãœãããããã³æ±ºããŠãã£ãŒã«ããæäŸããŸãã
df[:a]
ã¯df.a
ã»ã©è¯ããªãã®ã§ããã£ãŒã«ãã®ãªãŒããŒããŒããåŸæããå¯äžã®å Žæã¯DataFrames
ã§ãã ããããããã ãã§ãã®ãããªå€§ããªå€æŽãå¿
èŠã«ãªããšã¯æããŸããã ä»ã®ãŠãŒã¹ã±ãŒã¹ã¯PyCallã®ããã§ããããã¯ããã£ãŒã«ãã®ãªãŒããŒããŒããèš±å¯ããå¿
èŠãããããšã瀺ããŠããå¯èœæ§ããããŸãããããã¯éåžžã«å
·äœçãªéãžã¥ãªã¢ã³ã®ãŠãŒã¹ã±ãŒã¹ã«éãããŸãã ããããæ©èœãå©çšå¯èœã«ãªã£ããã人ã
ããã®æ©èœã誀çšããªãããã«ããã«ã¯ã©ãããã°ããã§ããããã ç¹å¥ãªã¢ãžã¥ãŒã«ã§é衚瀺ã«ããŸããïŒ
@nalimilan ãå¯èœãªéãx.property
æ§æã䜿çšããããšããå§ãããŸãã éèŠãªã®ã¯ã人ã
ã¯ãã®æ§æã_æ¬åœã«_奜ãã ãšããããšã§ãâããã¯ãšãŠã楜ããã§ãã ãã®ãããªåªããæ§æãæ¡çšãããªããžã§ã¯ããžã®å
éšã¢ã¯ã»ã¹ã«ã®ã¿äœ¿çšããå¿
èŠããããšå
·äœçã«èšããšããŸã£ããã²ããããããã«èŠããŸãããããããã®åªããæ§æã¯ååšããŸãã䜿çšããªãã§ãã ããïŒã APIã«éãæ§æã䜿çšãããã®ã§ã¯ãªããç§çãªãã®ã«ã¢ã¯ã»ã¹ããããã®æ§æãäžäŸ¿ã§ãããã«ããæ¹ãã¯ããã«åççã ãšæãããŸãã ãããããããã¯..
æŒç®åã®è¯ããŠãŒã¹ã±ãŒã¹ã§ãïŒãã©ã€ããŒã_real_ãã£ãŒã«ãã¢ã¯ã»ã¹æŒç®åã
ç§ã¯å®éããã®å€æŽã«ãããç©äºãããæ確ã«ãªããäžè²«æ§ã倱ãããã®ã§ã¯ãªããããæ確ã«ãªããšæããŸãã ç¯å²ãæ€èšããŠãã ããâçŸåšã step(r)
ãšr.step
ã¹ã¿ã€ã«ã®æãããçµã¿åããããããŸãã ç¹ã«FloatRange
ãå°å
¥ããŠä»¥æ¥ã step(r)
ã䜿çšããã³ãŒãã®ã¿ãæ£ãããããããã¯å±éºã§ãã æ··åã®çç±ã¯ãç¯å²ã®äžéšã®ããããã£ãä¿åãããäžéšãèšç®ãããããã§ãããã ãããããã¯æéã®çµéãšãšãã«å€åããå®éã«ã¯ç¯å²ã®ã¿ã€ãããšã«ç°ãªããŸãã step(r)
èªäœã®å®çŸ©ãé€ããŠããã¹ãŠã®ã¢ã¯ã»ã¹ãstep(r)
ã¹ã¿ã€ã«ã§ãããšãããè¯ãã¹ã¿ã€ã«ã«ãªããŸãã ããããããã«å¯ŸããŠããã€ãã®æ¥ãªå¿ççéå£ããããŸãã r.step
ãããã©ã«ãã§r..step
ã«èšå®ããã¡ãœããåŒã³åºããè¡ããšã人ã
ã¯èªç¶ã«ããããããšãå®è¡ã§ããŸãã
æªéã®ä»£åŒè
ãïŒç§ãšäžç·ã«ïŒæŒããã«ã¯ã r.length
ãŸãã¯length(r)
ãšæžãã¹ãã§ããïŒ Rubyãr.length
ã¹ã¿ã€ã«ã«å®å
šã«ã³ãããããŠããã®ã«å¯Ÿãããžã§ããªãã¯é¢æ°ãšã¡ãœããã®éã®äžäžèŽã¯PythonãèŠãããŠããåé¡ã§ãã
以äžã®ããã®1 ..
ã®ããã«Core.getfield
ïŒ
@StefanKarpinskiçã«ããªã£ãŠããŸããããã©ã€ããŒããã£ãŒã«ãã®æ§æãè¿œå ããå¿
èŠããããã€ã³ã¿ãŒãã§ã€ã¹ã¯ã¡ãœãããšãããªãã¯ãã£ãŒã«ãã®äž¡æ¹ãæå®ããå¿
èŠããããŸãã ãããŠç¢ºãã«ãäžè²«æ§ã確ä¿ããããã®ã¹ã¿ã€ã«ã¬ã€ããå¿
èŠã§ãã length
ã¯é£ãããã®ã§ãããããšãã°size
ããããŸããããã¯éåžžã«äŒŒãŠããŸããããã£ã¡ã³ã·ã§ã³ã€ã³ããã¯ã¹ãå¿
èŠã§ãã ãã®æ±ºå®ã¯ã¯ãŒã ã®çŒ¶ãéããŸã...
ãã®å Žåãå®éã®ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããã®..
ãšãã¡ãœãããŸãã¯å®éã®å€ã§ãããã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããã®.
ããµããŒãããŸãã
æªéã®ä»£åŒè ãïŒç§ãšäžç·ã«ïŒæŒããã«ã¯ã
r.length
ãŸãã¯length(r)
ãšæžãã¹ãã§ããïŒ ãžã§ããªãã¯é¢æ°ãšã¡ãœããã®éã®äžäžèŽã¯PythonãèŠãããŠããåé¡ã§ãããRubyã¯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ã«äŒŒãã³ãŒããæžãã ããªã®ã§ãããããããã§ã¯ãããŸãããïŒïŒ
ããã¯ããã®æ©èœã§å¯èœã«ãªããŸãã ããã¯ç§ã«äžæåæ¢ãäžãããã®ã®1ã€ã§ãã ç§ã¯ãã®ãããªooã¹ã¿ã€ã«ã®ã³ãŒãã«åé¡ã¯ãããŸãã-ç§ãèšã£ãããã«ãããã¯ããªãå¿«é©ã§ã人ã ã¯ãããæ¬åœã«å¥œãã§ã-ãããããã¯ç§ãã¡ãããªãããã¹ãããšã«ã€ããŠã®åŒ·åãªããªã·ãŒã_æ¬åœã«_å¿ èŠãšãããã®ãæžãæ¹æ³ã«ååãªéžæè¢ããããããŸãããªãã¯ããªããã§ããããšã§éåžžã«èªç±ã«ãªãããã§ãã
JuliaãåŠã³å§ãããšããããããªãã®æ§æã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã¹ã¿ã€ã«ã粟ç¥çã«ææŸãã®ã«å€§ãã«åœ¹ç«ã¡ãŸããã ããã ãã§ãç§ã®ææ¡ã¯æªããšæããŸãã
ãŸããåçŽãªãªãŒããŒããŒãïŒã€ãŸãã a.b
sans (args...)
ïŒã®å Žåãäžèšã®@nalimilanã®ã³ã¡ã³ãã«åæããŸãã åé¡ïŒ4935ã§ã¯ããã£ãŒã«ãã¯APIã®äžéšã§ã¯ãªããã¡ãœããã®ã¿ã§ããå¿
èŠããããšããã³ã³ã»ã³ãµã¹ãããããã§ãã ãã®çµæããã®åé¡ã¯è§£æ±ºãããããã§ãã .
-overloadingæ§æã䜿çšãããšãéåžžã®ãã£ãŒã«ããAPIã®äžéšã«ãã¹ãã§ã¯ãªãããšãæ確ã«ãªãããã£ãŒã«ããAPIã®äžéšã«ããããšãæšå¥šãããŸãã
ããããã¯ãã .
æ§æã¯äŸ¿å©ã§ã...
ã©ãã§ããïŒåäžã®.
ã¯getfield(x::MyType, ::Field{:name}) = ...
ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã§ããå¿
èŠãããããã£ãŒã«ãã¢ã¯ã»ã¹ã¯..
ãŸã§_ã®ã¿_ã§ãïŒã€ãŸãã .
ã¯çŸåšäœã§ããïŒã
ããã«ãããæ確ãªåºå¥ãå¯èœã«ãªããŸãã
.
ã¯ããããªãã¯APIãåã€ã³ã¹ã¿ã³ã¹ã®å€ã®ãããªãã®ã«ã¢ã¯ã»ã¹ããããã®ãã®ã§ã..
ã¯ãã£ãŒã«ãã¢ã¯ã»ã¹çšã§ãããéåžžã¯ãããªãã¯APIã§äœ¿çšããªãã§ãã ãããã¡ãããããã¯é倧ãªå€æŽã«ãªããŸãã
ããã¯åºæ¬çã«ç§ãææ¡ããŠããããšã§ããã .
ããã©ã«ãã§..
ãããå£ããããšã¯ãããŸããã
ãã¿ãŸãããèªã¿çŽããŠãã ããïŒ
ããããããã©ã«ãã§..
ãªã.
ã¯ããããªãã¯APIãšã¯äœããããã§ãªããã®ã«ã€ããŠéçºè
ã«æ±ºå®ã匷ããã®ã§ãå®éã«ã¯è¯ããããããŸããïŒå£ããŠããããšã¯å¥ãšããŠïŒã ãŸãããŠãŒã¶ãŒã..
䜿çšããå Žåãã³ãŒããç Žæããå¯èœæ§ããããšäºæ³ã§ããŸããã .
ã¯ç Žæããªãã¯ãã§ãã
ããã¯è¯ãç¹ã§ãã 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
ãŸããïŒ
Stefanã«ãã£ãŠææ¡ãããã»ãã³ãã£ã¯ã¹ãšç§ã«ããè¿œå ã«ããã .
åžžã«é¢æ°åŒã³åºãã§ããã®ã«å¯ŸãïŒ +
ãåæ§ïŒã ..
ã¯åžžã«ãã£ãŒã«ãã§ããããšãæããã§ããã¢ã¯ã»ã¹ã
a.length
ãªã©ãè¯ãèãã§ãããã©ããã®åé¡ã«ã€ããŠïŒ .
ã¢ã¯ã»ã¹ã¯ãå€ããå°ãªãããdictã®ãšã³ããªã䜿çšããã®ãšåãããã«ãã¿ã€ãã®å®éã®ããŒã¿ã«ã¢ã¯ã»ã¹ããããã«ã®ã¿äœ¿çšããå¿
èŠããããŸãã ã size
ã length
ã step
ãªã©ã®éããŒã¿ããããã£ã®é¢æ°ã䜿çšããŸããããããã®äžéšã«ã¯è¿œå ã®ãã©ã¡ãŒã¿ãŒãå¿
èŠã«ãªãããã a.size(1)
ã¿ã€ãã®æ§æãæ£ãããããŸããã
ããããã®ãããã¯ã«é¢ããç§ã®èŠè§£ã§ãïŒ
a.property() = ...
ãããªãã®ã¯å®å
šã«ééã£ãŠãããšæããããšãèŠããŠãããŠãã ãããa.length
ã¯è¯ãäŸã§ããã a.size(1)
ã¯ãè¿œå ã®åŒæ°ãå¿
èŠãªããã§ã¯ãããŸããã.
ããã©ã«ãã§..
ãŸãã ãžã¥ãªã¢ã¯å®åçãªèšèªãšããŠç¥ãããŠããŸããã ãã®ããã«ä¿ã¡ãŸããã
.
ããã©ã«ãã§..
ãŸãã ãžã¥ãªã¢ã¯å®åçãªèšèªãšããŠç¥ãããŠããŸããã ãã®ããã«ä¿ã¡ãŸããã
ç§ã¯ããã«åæããåŸåããããŸãã ã§ãåæããããã£ãèšå®ããããã®æ§æã¯ãã¡ããã©ã ããa.property = b
ããªãa.property() = b
ã
確ãã«ãæ§æãšããŠã®a.property()
ãç§èŠã§ã¯ãªãçç±ãæ確ã«ãããã£ãã ãã§ã
ãã£ãšæ確ã«èšããšããããæ§æã§éèŠãªã®ã¯ãé¢æ°ãå/ã¯ã©ã¹ã«é¢é£ä»ããããšãã§ãããšããããšã§ã¯ãªããã²ãã¿ãŒ/ã»ãã¿ãŒãé©åã«èšè¿°ã§ããããšã§ãã ãŸããã²ãã¿ãŒ/ã»ãã¿ãŒã¯ããŒã¿ã®ã«ãã»ã«åã«ãšã£ãŠéèŠã§ãïŒã€ã³ã¿ãŒãã§ã€ã¹ãå®å®ãããŸãããå®è£ ãå€æŽããŸãïŒ
ãã®å€æŽã¯APIèšèšè ã®èŠ³ç¹ããã¯çŽ æŽãããããšã§ãããå°æ¥ã®äžæŽåãå¶éããããã«ãäœããã®ã¹ã¿ã€ã«ã¬ã€ããä»å±ããŠããå¿ èŠãããããšã«åæããŸãã
ããã«ãããdslã®ãããªRubyãæå¹ã«ãªããŸã...
amt = 1.dollar + 2.dollars + 3.dollars.20.cents
ããããçæ°ã®ãããªJavaã«åããŠãã ããã
object.propert1.property2.property3 ....
ã»ãã®å°ãã®èãïŒ
.
æ§æãæãå¿
èŠã§ãã d.key
ã䜿çšããŠããd[:key]
ã䜿çšããæ¹ãè¯ãã§ãããã ããããçµå±ããã¯éèŠã§ã¯ãããŸãããa->property
ã¯a..property
ãããèªã¿ããããšæããŸãã ãããããããããã»ã©å€§ããªåé¡ã§ã¯ãªããjuliaæ§æã§æ©èœãããã©ããã¯ããããŸããã@BobPortmannç§ã¯åæã
ãã©ã€ããŒããã£ãŒã«ãã«a->property
ã䜿çšããããšã¯ãCããã«ãŒããžã¥ãªã¢ããé ãããããã®è¯ãæ¹æ³ã§ã;-)
ç§ã¯..
æ§æã奜ãã§ãã
a->property
æ§æã¯ãã§ã«è©±ãããŠããŸãâããã¯ç¡åé¢æ°ã§ãã ãã ãã a..b
æŒç®åã¯ããã°ããã®é䜿çšãããŠããŸãã dictã®ãããªãã®ã§ããªãã·ã§ã³ã®ãã£ãŒã«ãããããããããã®ãå¿
èŠãªå ŽåããããŸãã ãã®ããã«getter / setteræ§æã䜿çšãããšãdictã€ã³ããã¯ã¹æ§æãããåªããŠããŸãã
ãa-> propertyæ§æã¯ãã§ã«è©±ãããŠããŸã-ããã¯ç¡åé¢æ°ã§ããã
ã¯ãããã¡ããã ->
åšãã«ã¹ããŒã¹ããªããšããã®ããã«ã¯èŠããŸãã
ã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³ãšããŠãpropertyïŒxïŒãèªã¿åãå°çšããããã£ã«äœ¿çšããx.propertyãèªã¿åã/æžã蟌ã¿ããããã£ã«äœ¿çšããããšãæšå¥šããã®ã¯ã©ãã§ããïŒ
æžã蟌ã¿å¯èœãªããããã£ã®å Žåãx.foo = barã¯set_fooïŒïŒxãbarïŒãããã¯ããã«åªããŠããŸãã
èªã¿åãçšã«foo(x)
ã䜿çšããæžã蟌ã¿çšã«x.foo
ã䜿çšãããšãéåžžã«æ··ä¹±ããŸãã å®éããããããããã£ã®é
åã§ãã èªã¿åãã¢ã¯ã»ã¹ãšæžã蟌ã¿ã¢ã¯ã»ã¹ã«åãæ§æã䜿çšãããã€ãŸããååŸã§ããæãåçŽãªæ§æïŒã²ãã¿ãŒãšã»ãã¿ãŒã®å ŽåïŒ
ã¹ã¿ã€ã«ã«é¢ããŠã¯ããã®æ©èœãå®è£
ãããå Žåã«x.length
ãšlength(x)
äž¡æ¹ãå¿
èŠãã©ããããŸãã¯åŸã®ãã©ãŒã ãéæšå¥šã«ããŠåé€ããå¿
èŠããããã©ãããšãã倧ããªåé¡ããããŸãã
ç§ã®æèŠã§ã¯ããããè¡ãæ¹æ³ã¯1ã€ã ãã§ãå°æ¥ã¯x.length
ã®ã¿ã䜿çšããå¿
èŠããããŸãã ãããŠãã¹ã¿ã€ã«ã«é¢ããŠã¯ããšãŠãã·ã³ãã«ã ãšæããŸãã åã®åçŽãªããããã£ã§ãããã®ã¯ãã¹ãŠããã£ãŒã«ãæ§æã䜿çšããŠå®è£
ããå¿
èŠããããŸãã æ©èœãæã€ä»ã®ãã¹ãŠã ç§ã¯CïŒã§ããããã£ãé »ç¹ã«äœ¿çšããŸããããäœããããããã£ã§ããå¿
èŠããããã©ããããããªãå Žåã¯ãã£ãã«èŠã€ãããŸããã§ããã
ã©ã³ãã ã«éžæããã1åŒæ°é¢æ°ã®ã»ãããx.f
æ§æã«å€æŽããããšã«å察ã§ãã @ mauro3ã¯ããããè¡ããšèšèªã®æ§è³ªããããŸãã«ãªããšããè¯ãç¹ã瀺ãããšæããŸãã
a.b
ã¯ãå°ãªããšãèŠèŠçã«ã¯ãäžçš®ã®ã¹ã³ãŒãæ§é ã§ãã b
ã¯ãã°ããŒãã«ã«è¡šç€ºãããèå¥åã§ããå¿
èŠã¯ãããŸããã ããã¯æ±ºå®çãªéãã§ãã ããšãã°ãäžéšã®è¡åå æ°å解ã«ã¯.U
ããããã£ããããŸãããããã¯å®éã«ã¯äžè¬çãªãã®ã§ã¯ãããŸãã---ã°ããŒãã«é¢æ°U
ã¯å¿
èŠãããŸããã ãã¡ãããããã¯å°ã䞻芳çã§ããç¹ã«ã U(x) = x.U
ç°¡åã«å®çŸ©ã§ããããã§ãã ãããã length
ã¯å¥ã®çš®é¡ã®ãã®ã§ãã ãã¡ãŒã¹ãã¯ã©ã¹ã§ããæ¹ã䟿å©ã§ãïŒäŸïŒ map(length, lst)
ïŒã
ãããç§ãææ¡ããã¬ã€ãã©ã€ã³ã§ãã foo.bar
è¡šèšã¯ã次ã®å Žåã«é©åã§ãã
foo
ã«ã¯ãå®éã«ã¯bar
ãšããååã®ãã£ãŒã«ãããããŸãã äŸïŒ (1:10).start
ãfoo
ã¯ãé¢é£ããã¿ã€ãã®ã°ã«ãŒãã®ã€ã³ã¹ã¿ã³ã¹ã§ããããã®äžéšã«ã¯å®éã«ã¯.bar
ãšããååã®ãã£ãŒã«ãããããŸãã foo
ã«å®éã«bar
ãã£ãŒã«ãããªãå Žåã§ãããã®ãã£ãŒã«ãã®å€ã¯ãã®ã¿ã€ãã«ãã£ãŠç€ºãããŸãã äŸïŒ (1:10).step
ã (0.1:0.1:0.3).step
ãfoo
ã¯bar
æ瀺çã«æ ŒçŽããŸããããåçã®æ
å ±ãããã³ã³ãã¯ããŸãã¯å¹ççãªåœ¢åŒã§æ ŒçŽããããã䜿ãåæãæªããªããŸãã äŸïŒ lufact(rand(5,5)).U
ãbar
ããããã£ãã±ãŒã¹1ãš3ã§å²ãåœãŠå¯èœã«ããã®ã¯çã«ããªã£ãŠããŸããã2ã§ã¯ãªãå ŽåããããŸããã±ãŒã¹2ã§ã¯ãå€ã®ã¿ã€ããå€æŽã§ããªãããã bar
ããããã£ãå€æŽããããšã¯ã§ããŸãããããã¯ãã®ã¿ã€ãã«ãã£ãŠæ瀺ãããŸãã ãã®ãããªå Žåãä»ã®é¢é£ããã¿ã€ãã®bar
ããããã£ã®å€æŽããããããäžå€ã«ãããã foo.bar = baz
æ瀺çã«ãšã©ãŒã«ããããšã«ãã£ãŠçŠæ¢ããå¿
èŠããããŸãã
@tknopp ãç§ã¯æžã蟌ã¿ã«x.foo
ã䜿çšããèªã¿åãã«foo(x)
ã䜿çšããããšãææ¡ããŠããŸããã§ããã ç§ã®ææ¡ã¯ãããããã£ãèªã¿åããšæžã蟌ã¿ã®äž¡æ¹ã§ããå Žåãããããx.foo
èªã¿åããšæžã蟌ã¿ã®äž¡æ¹ãè¡ãããšããå§ãããŸãã
@StefanKarpinski ïŒãããã length
ã¯3ã®å Žåã§ã¯ãããŸãããããã§ããµã€ãºã¯éåžžä¿åããããã®ã§ããã length
ã¯ãµã€ãºã®ç©ã§ãã
ãã®å€æŽã«ããããããã®é¢æ°ã¯ãã¯ããã¡ãŒã¹ãã¯ã©ã¹ã§ã¯ãªããªããšãžã§ãã¹ã¯ææããŠããŸãã
@stevengj ïŒãªãã»ã©ã æ··ä¹±ããŠãã¿ãŸããã
@tknopp âé·ãã¯ãµã€ãºããå°ãåºãããŸãããããããšåçã§ã¯ãããŸããã ãµã€ãºãããã£ãŠããå Žåã¯ãé·ããèšç®ã§ããŸããããã®éã¯ã§ããŸããã ãã¡ãããããã¯å°ããŒãããç·ã§ãã ãããlufact
åãå
¥ããããäž»ãªçç±ã¯ããããããåªããAPIãèŠã€ããããªãã£ãããã§ãã å¥ã®ã¢ãããŒãã¯ãäžè¬çãªè¡åã®äžäžè§éšåãšäžäžè§éšåãäžããupper
ãšlower
ãžã§ããªãã¯é¢æ°ãå®çŸ©ããããšã§ãã ãã ãããã®ã¢ãããŒãã¯ãããšãã°QRå解ã«äžè¬åãããŠããŸããã
pycallãå æ°å解ããããŠããããããŒã¿ãã¬ãŒã ãªã©ããã®æ§æã_æ¬åœã«_èŠæ±ããŠããããã«èŠããã±ãŒã¹ã¯ãããããã§ããããšãããããŸãã
f(x)
察x.f
ã©ã³ãã ãªãã¡ãæ··ãã«ãªã£ãŠããŸãã®ã§ã¯ãªãããšããªãå¿é
ããŠããŸãã ããã¯ã·ã¹ãã ãåŠã¶ã®ãã¯ããã«é£ããããã§ãããã
@StefanKarpinskiã®ãªã¹ãã®ãã€ã³ã1ã¯ãã¿ã€ãã®ãã£ãŒã«ããèªåçã«ãããªãã¯APIã«å±ããããšãæå³ããŸãããïŒ
çŸæç¹ã§ã¯ãã¢ãžã¥ãŒã«ã®ãããªãã¯APIãšã¯äœãããšã¯ã¹ããŒãããããã¹ãŠã®é¢æ°ãšã¿ã€ãïŒãã£ãŒã«ãã¯é€ãïŒãããããŸãã ãã®å€æŽåŸãã©ã®ãã£ãŒã«ãããããªãã¯APIã«å±ããŠããã®ããã©ã®ãã£ãŒã«ãã«å±ããŠããªãã®ããå€æã§ããªããªããŸãã Pythonã®ããã«ããã©ã€ããŒããã£ãŒã«ãã«a._foo
çšåºŠã®ååãä»ããããšãã§ããŸãããããã¯ããŸãè¯ããªãããã§ãã
å人çã«ã¯ãDataFramesã®ã±ãŒã¹ã¯å°ãäžå¿ èŠã ãšæããŸãã ãããè¡ãå ŽåãDataFramesã«æ©èœãè¿œå ããŸãããäžè²«æ§ã®åªå€±ã¯ãæ°æåãä¿åãããããã¯ããã«åä»ã§ãã
ãŸããDataFramesãPyCallã«äŸåããŠæ±ºå®ãäžãããšã¯ããŸããïŒãããŠGtkããããæãã§ããŸãïŒã ãã£ãŒã«ãã¯ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã§ããå¿ èŠããããšèããŠããããïŒãèŠæ ããè¯ããããïŒããŸãã¯å¿ èŠãããŸããã
... pycall..ã
ããã³JavaCall
ããã®äž»ãªäœ¿çšäŸã¯éJuliaã·ã¹ãã ãšã®çžäºäœçšã§ããããã«æãããã®ã§ã .
ããªãŒããŒããŒããã代ããã«ãææ¡ããã..
æŒç®åã䜿çšããã®ã¯ã©ãã§ããããã
ããã§ã®ããåçŽãªè§£æ±ºçã¯ã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ãã¯ã©ã¹å
ã§ã¡ãœããå®çŸ©ãå®è¡ã§ããããã«ãªããŸãããéåžžã«ééçãªA.b()
ã¯åãªãæžãçŽãã§ãããOOã¿ã€ãã®ã³ãŒããå¿
èŠãªå Žåã¯äžè¬çãªã¹ã¿ã€ã«ãèš±å¯ãããŸãã ããã¯ããªããžã§ã¯ãæåããæ¥ã人ã
ã«ãšã£ãŠéåžžã«èªç¶ãªããšã ãšæããŸãã
ãŸããæ°ããgetfield
ãšA..b
ã䜿çšããŠãããã§ã®ãªãŒããŒããŒããèš±å¯ããŸãããããã§ã®ãªãŒããŒããŒãã¯åŒ·ããå§ãã§ããŸããã getfield(A, ::Field{:field})
ã®ãªãŒããŒããŒãã®ããããªæãã®ããã
@ mauro3 ïŒ
@StefanKarpinskiã®ãªã¹ãã®ãã€ã³ã1ã¯ãã¿ã€ãã®ãã£ãŒã«ããèªåçã«ãããªãã¯APIã«å±ããããšãæå³ããŸãããïŒ
ããã¯ãå¿
èŠãªãšãã§ã¯ãªãã foo.bar
è¡šèšã䜿çšããŠãåé¡ããªãå Žåã®ãªã¹ãã§ããã ããã©ã€ããŒãããã£ãŒã«ãã®foo.bar
è¡šèšãç¡å¹ã«ãããšã foo..bar
ä»ããŠã®ã¿ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
@karbarcca ïŒããªããããã§äœãææ¡ããŠããã®ãã¯ã£ããããŠããŸããã
fwiwãç§ã¯æ
£ç¿ã«ãã倧人ã®åæã¢ãããŒããæ¡çšãã .
å®å
šã«éè² è·ã«ã§ããããã«ããã®ã奜ãã§ãã äºéç¹ã®ææ¡ã¯ãæ··ä¹±ãæžããã®ã§ã¯ãªããå¢ããããšã«ã€ãªãããšæããŸãã
@ihnorton âãã£ãŒã«ãã¢ã¯ã»ã¹ã®ïŒãªãŒããŒããŒãäžå¯èœãªïŒã³ã¢æ§æãšããŠa..b
ã䜿çšããããšã«å察ããã®ãããªãŒããŒããŒãå¯èœãªæ§æã«a..b
ã䜿çšããã®ã«å察ããã®ãã
ãžã¥ãªã¢ã®æé«ã®æ©èœã®1ã€ã¯ããã®ã·ã³ãã«ãã§ãã 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
ã¯ããŸã説åŸåããããŸããã 2人ã®ãã£ã©ã¯ã¿ãŒãå¿
èŠãªã®ã¯ãšãŠã... 2çªç®ã®ã¯ã©ã¹ã§ãã ãã¶ã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
getindex / setindexãšåãããã«ããªãæ確ãªå€æã§ãããããããã奜ãã§ãããç¹ã«OOèšèªããã±ãŒãžã®å Žåã¯ãå¿ èŠã«å¿ããŠåäžã®ãã£ã¹ãããOOã·ã¹ãã ãã·ãã¥ã¬ãŒãã§ããŸãã
次ã«ããã£ãŒã«ãã¢ã¯ã»ã¹ã«..
æŒç®åã䜿çšãããªãŒããŒããŒããããªãã·ã§ã³ã䜿çšããããšãææ¡ããŸããã ããã§ã®äœ¿çšã¯ãPyCall / JavaCallã..
ãžã®åŒã³åºãããªãŒããŒããŒãããããšã«ãã£ãŠãã£ãŒã«ãã¢ã¯ã»ã¹ãã·ãã¥ã¬ãŒãã§ããããã«ããDataFramesãåã¢ã¯ã»ã¹ã®ããã«..
ããªãŒããŒããŒãã§ããããã«ããããšã§ããããã¯ãã®æ°ããããã©ã«ãã®ãã£ãŒã«ãã¢ã¯ã»ã¹ã§ããããŸããããããã¿ã€ãã®äžè¬ã
çŽç²ãªæ§æã®æžãçŽãã«ã¯ãœããã¹ãããããããŸãã ä»ããa.f(x)
èšè¿°ããŠæ©èœãããããšãã§ããã®ã¯ééããªãæªãããšã§ãããã»ãšãã©ã®ãªããžã§ã¯ãæåèšèªãšã¯çŽããããã»ã©ç°ãªãæå³ãæã£ãŠããŸãã
ãã¡ããããã®ã³ã€ã³ã®å察åŽã¯æãããã¹ã¿ã€ã«ã®æçåã§ããã a.f
ãa.f()
ãšäœã®å
±éç¹ããªããšããäºå®ã¯ãå¹»æ³ãããã«åŽ©å£ãããŸãã
ãžã¥ãªã¢ã®æé«ã®æ©èœã®1ã€ã¯ããã®ã·ã³ãã«ãã§ãã
x.y
ãªãŒããŒããŒã
ããã§ãåãæ°æã¡ã ãããå®éã«å¿
èŠãªã®ãéãããæ°ã®çžäºéçšåã§ããå Žåãå宣èšã§æ瀺çã«èŠæ±ãããå Žåã«ã®ã¿æå¹ã«ããã®ã¯ã©ãã§ããããã ããšãã°ã type
ãšimmutable
以å€ã®è¿œå ã®ããŒã¯ãŒãã¯ã ootype
ãªã©ã«ãªããŸãã
ãããŠãafãafïŒïŒãšäœã®å ±éç¹ããªããšããäºå®ã¯ãå¹»æ³ãããã«åŽ©å£ãããŸãã
ããã@JeffBezansonã®æå³ãæ確ã«ã§ããŸããïŒ
a.f()
æ©èœããå Žåã a.f
ã¯ããçš®ã®ã¡ãœãããªããžã§ã¯ãã§ãããšæããŸãã
ãããããã£ãã ãããããªãã¯ééããªãmap(t.method,collection)
ãããªããšãããããšãã§ããªãã§ãããã
@ mauro3ã«åæããŸãã obj.method(...)
èš±å¯ãããšãæ°ãããŠãŒã¶ãŒãjuliaãPythonãRubyãªã©ãšç«¶åããããšããŠããå¥ã®ãªããžã§ã¯ãæåèšèªãšèŠãªããååã«è©äŸ¡ã§ããªããªã¹ã¯ããããŸããè€æ°ã®ãã£ã¹ãããã§ããçŽ æŽãããã ãã1ã€ã®ãªã¹ã¯ã¯ããããŸã§ã«éçºããããããžã¥ãªã¢ã³ãªã¹ã¿ã€ã«ãšã¯å¯Ÿç
§çã«ãããããŠãŒã¶ãŒããã粟éããŠãããã®ã§ãããããæšæºã®ooã¹ã¿ã€ã«ãåªå¢ã«ãªãããšã§ãã
DataFrames以å€ã®ãŠãŒã¹ã±ãŒã¹ã¯ãªããžã§ã¯ãæåèšèªãšã®çžäºéçšã«å¶éãããŠããã®ã§ãããã¯ãã¹ãŠãã¯ãã§åŠçã§ããŸããïŒ ã€ãŸãã <strong i="8">@oo</strong> obj.method(a)
ã¯method(obj,a)
ãŸããïŒ
@karbarccaããã¯ããã¹ãŠãèªåçã«2ã€ã®æ¹æ³ã§èšè¿°ã§ããããšãæå³ããŸãã
x = 3
x.sin()
sin(x)
x + 2
x.+(2) # ?!
@karbarcca https://github.com/JuliaLang/julia/issues/1974#issuecomment -38830330
t.methodïŒargs ...ïŒ
ïŒã¯åãªãæžãçŽãã§ã
methodïŒtãargs ...ïŒ
ãªãŒããŒããŒãå¯èœãªãããã䜿çšããŠpyobj.func
pyobj[:func]
ãåŒã³åºãããšãã§ãããããPyCallã§ã¯ããã¯å¿
èŠãããŸããã ãã®å Žåã pyobj.func()
ã¯å®éã«ã¯(pyobj.func)()
ãŸãã
a.foo(x)
ãfoo(a, x)
ãšããŠæžãæããŠããPyCallã®åé¡ã¯è§£æ±ºãããŸãããããã¯ã foo
ãJuliaã¡ãœããã§ã¯ãªããJuliaã¡ãœããã«ãªãããšãã§ããªããããå®è¡æã«åçã«æ€çŽ¢ããå¿
èŠãããããã§ãã ã getfield{S}(::PyObject, ::Type{Field{S}})
ãæ£ããããšãå®è¡ã§ããããã«ã a.foo(x)
ãgetfield(a, Field{:foo})(x)
ãŸãã¯åæ§ã®ãã®[ãŸãã¯ããããgetfield(a, Field{:foo}, x)
]ã«æžãæããå¿
èŠããããŸãã
@JeffBezanson https://github.com/JuliaLang/julia/issues/1974#issuecomment -38837755
ããã§å¥ã®ãªãã¬ãŒã¿ãŒã®å¿ èŠæ§ããããå§ããŸããããa..bã¯ããŸã説åŸåããããŸããã 2人ã®ãã£ã©ã¯ã¿ãŒãå¿ èŠã ãšãšãŠãæããŸã...ã»ã«ã³ãã¯ã©ã¹
äžæ¹ã ..
ã¯ãShiftããŒãæŒãå¿
èŠããªãããã $
ã @
ãŸãã¯|
ãããã¯ããã«éãå
¥åãããŸãã ããããŠ2人ã®ãã£ã©ã¯ã¿ãŒã§ããéãæã¯åãããŒã«çãŸããŸãïŒsmileïŒ
@stevengjããããªãã»ã©ã ããããç§ã®äž»åŒµã¯ãæžãæãã¯ãã¯ãã§å®è¡ã§ãããšããããšã§ãã
JavaCallã®å Žåãå®éã«å¿ èŠãªã®ã¯åºæ¬çã«unknownPropertyãã³ãã©ãŒã ãã§ãã ç§ã¯å®éã«æ¢åã®ããããã£ã®èªã¿åããŸãã¯æžã蟌ã¿ãæžãæãããååãããããå¿ èŠã¯ãããŸããã ã§ã¯ããxãæ¢åã®ããããã£ã§ãªãå Žåã«ã®ã¿axãgetfieldïŒaãïŒxïŒã«æžãçŽãããããšããã«ãŒã«ã¯ãç©äºãæ£æ°ã«ä¿ã€ã®ã«åœ¹ç«ã¡ãŸããïŒ
@simonbyrne ããã¯ããå¿
èŠãšããããšã¯ãã¯ãªãŒã³ã§ééçãªèšèªéåŒã³åºãã®æ¬²æ±ãæã¡è² ããã§ãããã ãŸãã確å®ã«åäœãããã®ã¯é£ããã§ãããã ããšãã°ã type Foo; p::PyObject; end
ãããããªããžã§ã¯ãf::Foo
ã«å¯ŸããŠfoo.p.bar
ãå®è¡ãããšããŸããããã§ã bar
ã¯Pythonããããã£ã«ãã¯ã¢ããã§ãã foo.p.bar
ã®2ã€ã®ãããã®æå³ã確å®ã«åºå¥ã§ãããã¯ããæ³åããã®ã¯é£ããã§ãã
æ£çŽãªãšãããç§ã¯ã¹ã¿ã€ã«ã«å€§ããããšã¯èŠãŠããŸããã é«å質ã®ããã±ãŒãžã¯ãå¯èœãªå Žåã¯Base
ããã®ä»ã®ããã±ãŒãžã®ã¹ã¿ã€ã«ãæš¡å£ããäœãããŠãå¥åŠãªã³ãŒããæžã人ãããŸãã ããã¥ã¢ã«ã®åŸã®ã»ã¯ã·ã§ã³ã§ãããã®ãªãŒããŒããŒããé
眮ããæ
éã«éžæãããããã€ãã®ã±ãŒã¹ã§ã®ã¿äœ¿çšããããšããå§ãããŸãïŒããšãã°ãèšèªéã®çžäºéçšæ§ãèªã¿åã/æžã蟌ã¿ããããã£ãããããfactor.U
ãªã©ã®åå空éã®æ±æãåé¿ããããïŒ ããããŠäžè¬çã«foo[:bar]
ããã¯ãªãŒã³ãªä»£æ¿æ段ãšããŠïŒããã¹ãŠã«ãããã䜿çšããããã±ãŒãžã§ãªãŒããŒã©ã³ããããšã¯ãªããšæããŸãã äž»ãªããšã¯ã_we_ãäœã䜿çšãããã決å®ãããããæšå¥šããããšã§ãããããããæšå¥šããã䜿çšæ³ã®ãªã¹ããéåžžã«çãããå®éã®ããŒãºãçºçããå Žåã«ã®ã¿æ¡åŒµããå¿
èŠããããŸãã
foo.bar(...)
ã«type Foo; bar(...) = ....; end
ãããªéåžžã«ç°¡åãªOOã®ãããªæ§æãè¿œå ããŠããªãã®ã§ãåå¿è
ã®èªæãå¶éãããŸãã
ç§ã¯åºæ¬çã«ããã§@stevengjã«å®å
šã«åæããŠa..b
奜ãã§ãã
a.b
䌌ãŠããŸãa
b`ã®ããã«æãããå¥åŠã§ã¯ãããŸãããã®å€æŽã«ãããããããïŒhttps://github.com/JuliaLang/julia/issues/2403ïŒJuliaã®æ§æã®ã»ãŒãã¹ãŠããªãŒããŒããŒãå¯èœã«ãªããŸããïŒ ïŒç§ãèããããšãã§ããå¯äžã®äŸå€ã¯äžé æŒç®åã§ãïŒã»ãšãã©ãã¹ãŠã®æ§æããªãŒããŒããŒãå¯èœãªã¡ãœãããã£ã¹ãããã«äžããããŠããããšã¯ãç§ã«ãšã£ãŠéåžžã«çµ±äžãããæ©èœã®ããã§ãã
ç§ã¯ãããå®éã«ã¯äžçš®ã®åçŽåã§ããããšã«åæããŸãã äžé
æŒç®åãš&&
ãš||
ã¯å®éã«ã¯å¶åŸ¡ãããŒãªã®ã§ãããã¯ã¡ãã£ãšéããŸãã ãã¡ããããã®ãããªãã®ã¯ã a..b
å®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹ã«ããããšã«å察ããŸãããã以æ¥ã_that_ãå¯äžã®ãªãŒããŒããŒãäžå¯èœãªæ§æã«ãªãã§ãããã ããããããã§ãããã¯è¯ãèãã ãšæããŸãã äžè²«æ§ã¯è¯å¥œã§ãããããèªäœã®ããã«æåªå
äºé
ã§ã¯ãããŸããã
ããããªãŒããŒããŒãã§ããªãé¢æ°åŒã³åºãããããŸãã ãšãŠãåºæ¬çãªç§ã¯ãããå¿ããŸããã
ãããåé¡ïŒ2403ã察åŠãããã®ã§ãã
ããã ããããããã¯ãããããã¯ããã«èµ·ããããã§ãã
ããã§ã®ç§ã«ãšã£ãŠã®å¯äžã®åé¡ã¯ãã¢ãžã¥ãŒã«ã«å®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹æŒç®åã䜿çšããã®ãæ¬åœã«è¯ãããšã§ããã誰ãPackage..foo
ãæžããããªãã®ã§ãããããããã¯èµ·ãããŸããã
ãããã®åŸã«ã¿ããå®æãããã®ã¯å°ãéãã§ãã æè¡çã«ã¯ã x.
ãåŒã³åºãå¯èœæ§ã®ããã¡ãœããããã§ãã¯ããŠããªããžã§ã¯ããã£ãŒã«ãåãŸãã¯ã¢ãžã¥ãŒã«åãäžèŠ§è¡šç€ºããããšãé©åãã©ããã確èªããå¿
èŠããããŸãã ãããŠã誰ãgetfield(::Module, ...)
ãå®çŸ©ããããšããªãããšãé¡ã£ãŠããŸãã
ã¿ãã®è£å®ã¯æ¬¡ã®ããã«å®è¡ã§ãããšæããŸãã foo.<tab>
ã¯ããããªãã¯ãã£ãŒã«ããããªã¹ããã foo..<tab>
ã¯ããã©ã€ããŒããã£ãŒã«ããããªã¹ãããŸãã ã¢ãžã¥ãŒã«ã®å Žåãããã ãã®ããã©ã«ãå®è£
ã§ããããã«OKã ããMod.foo
å¯èœMod..foo
ãšã°ããã«GETFIELDã¡ãœãããè¿œå ããŠããªã人ã
ã«äŒããModule
ïŒ ã€ãŸããèšèªã§æŽæ°ã®å ç®ãåå®çŸ©ããããšã¯ã§ããŸãããã¹ãŠã®å°çã解ãæŸãããã»ã°ã¡ã³ããŒã·ã§ã³éåãçºçããŸããããããé²æ¢ããããšã¯ããŠããŸããã ããã¯ããããæªããªãããšã¯ãããŸãããã
ããã°ã©ãã³ã°èšèªã¯å®éã«ã¯ååä»ãã ããæ°ã«ããã®ã§ãå®éã«ã¯ããããããããã«æªãã§ãã ååã®è§£æ±ºã¯ãæŽæ°ãè¿œå ãããããã¯ããã«éèŠã§ãã
Mod.foo
ããã©ã«ãã§Mod..foo
ã«ãã以å€ã«éžæè¢ã¯ãããŸããããå Žæã«ãã£ãŠã¯ããŒãã¹ãã©ããã«Mod..foo
ã䜿çšããå¿
èŠããããŸãã ..
æŒç®åã¯ããã©ãŒã«ããã¯ãå®çŸ©ããããã«Core.getfield
ãåŒã³åºãããšããã§ããªããããããã§ã¯éåžžã«åœ¹ç«ã¡ãŸãã ããã䜿çšãããšãããããCore.getfield
ãåé€ããã ãã§ã ..
ãããããŸããã
ããã¯å
¬æ£ãªç¹ã§ãâåœåã¯ããã°ã©ãã³ã°ã«ãããŠäžçš®ã®å€§ããªåé¡ã§ã:-)ã è¡ãã«ã¯è¯ãæ¹æ³ã®ããã«æãã-ã®ã¿..
ãªãCore.getfield
ã
ãã®2ã€ã®ã¢ã€ãã¢ã
[...]ãããã®ãªãŒããŒããŒããããã¥ã¢ã«ã®åŸã®ã»ã¯ã·ã§ã³ã«çœ®ããæ éã«éžæãããããã€ãã®ã±ãŒã¹ã§ã®ã¿äœ¿çšããããšããå§ãããŸã@stevengj https://github.com/JuliaLang/julia/issues/1974#issuecomment -38847340
ãããŠ
[...]å¯èœãªéãx.propertyæ§æã䜿çšããããšããå§ãããŸãïŒ //github.com/JuliaLang/julia/issues/1974#issuecomment -38694885
æããã«å察ããŠããã
æåã®ã¢ã€ãã¢ãéžæããå Žåã¯ããæ
éã«éžæããã±ãŒã¹ãã«å¯ŸããŠæ°ãã..
æŒç®åãäœæããæ¹ãçã«ããªã£ãŠãããšæããŸãã
å©ç¹ãšããŠãçŸåš[:name]
ã䜿çšãããŠããå ŽåïŒDataFramesãDict {Symbolã...}ïŒã«..name
ã䜿çšãããšããã£ãŒã«ãã¢ã¯ã»ã¹ãšã¯ç°ãªãããšãæ確ã«ç€ºããªãããå
¥å/æ§æããããããããããªããŸããèµ·ãã£ãŠããŸããã ããã«ã ..name
ã®äºéãããã¯ãå転ããã³ãã³ãã·ã³ãã«æ§æ:name
ãã³ããšèŠãªãããšãã§ããã¿ãã®è£å®ã«ãåé¡ã¯ãããŸããã
äžå©ãªç¹ãšããŠãPyCallãã§ã®äœ¿çšã å
ã®æ§æã«ããã»ã©è¿ãã¯ãããŸããïŒ .
å®éã«äœ¿çšããå¿
èŠãããå Žåã¯æ··ä¹±ããå¯èœæ§ããããŸãïŒã ããããæ£çŽã«èšããšãJuliaã¯Pythonæ§æãšå®å
šã«äºææ§ãããããã§ã¯ãªããPythonã§ç°¡åãªåœä»€ãå®è¡ããããã«ãPyCallã䜿çšããŠJuliaã§å€ãã®å
¥åãè¡ãå¿
èŠãããå Žåãåžžã«ãããŸãã ..
ããšãã¥ã¬ãŒãããããã®.
ã¯ãããã§ãã©ã³ã¹ããšãããšãã§ããŸãã ïŒèª€è§£ããªãã§ãã ãããç§ã¯PyCallãæ¬åœã«å¥œãã§ãç¹å¥ãªæ³šæãå¿
èŠãªéèŠãªæ©èœã ãšæããŸãïŒ
ç§ãçŸåšå¥œãã§ãã2çªç®ã®ã¢ã€ãã¢ã¯ã 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ã
ãã®èå³æ·±ãã¹ã¬ãããèªãã§ãããšãã«é ã«æµ®ããã ã®ã¯ããã£ã1ã€ã®èãã§ããã ãšã¯ã¹ããŒãã䜿çšããŠãããªãã¯ãã£ãŒã«ãã宣èšã§ããŸããããã¹ãŠã®ãã£ãŒã«ãã¯å®çŸ©ã¢ãžã¥ãŒã«å ã«è¡šç€ºãããŸããäŸïŒ
module Foo
type Person
name
age
end
export Person, Person.name
<strong i="6">@property</strong> Person :age(person) = person..age + 1
end
ãã®ç¶æ³ã§ã¯ããšã¯ã¹ããŒããããPersonã¯ãnameãããã³ãageãã®ããã«èŠããŸããããã®å Žåãageã¯1ãè¿œå ããé¢æ°ãä»ããŠèªã¿åãå°çšã«ãªããŸãã ãã¹ãŠã®Personã®ãšã¯ã¹ããŒãã¯ãexportPersonã*ãªã©ãšããŠå®è¡ãããå ŽåããããŸãã
[paoïŒåŒçšç¬Š]
@emeseles Juliaã³ãŒãã®ãããªãã®ãåŒçšããå Žåã¯ãããã¯ã¯ã©ãŒãã䜿çšããããã«æ³šæããŠãã ãããããã«ããããã©ãŒããããç¶æãããJuliaã®ãã¯ããåãååã®ãŠãŒã¶ãŒã«å¯ŸããŠGitHubéç¥ãäœæã§ããªããªããŸãã
.
ãš..
ã¯çŽããããã§ãïŒæ確ã§èŠããããæªè¡çšã¯è¯ããã®ã§ã
ãããã§ããã®ãæ¬åœã«æ¥œãã¿ã«ããŠããŸãã ããã¯ã0.4ãããžã§ã¯ããšããŠãã©ã°ãç«ãŠãã®ã«ååãªå€§ããã®å€æŽïŒãŸãã¯ïŒ5848ã®WIPïŒã§ããïŒ
ã¯ããããã¯ééããªããããžã§ã¯ãã§ãã
ç§ãã¡ã®ã»ãšãã©ã¯ãå°ãªããšããããããæšå¥šããã䜿çšæ³ãå¶éããå¿
èŠãããããšã«åæããŠãããšæããŸãã ç§ã®èãã§ã¯ãæåã¯çžäºéçšæ§ïŒPyCallã®ããã«ä»ã®èšèªãšã®çžäºéçšæ§ãããäžè¬çã«ã¯ãããè¡šèšãèªç¶ãªå€éšã©ã€ãã©ãªïŒãšãããããå¯å€ç¶æ
ã®ãªããžã§ã¯ãïŒ get_foo(x)
以éïŒã®2ã€ã®äœ¿çšæ³ã«ã®ã¿æšå¥šããå¿
èŠããããŸãset_foo!(x, val)
ã¯éãã§ãïŒã
å€åœãšã®çžäºéçšæ§ã®ããã ãã«ãããæšå¥šãããšããŠããç§ã®æèŠã§ã¯ããã®ç®çã ãã§ãã®æ©èœãæ£åœåããã®ã«ååã§ãã ãžã¥ãªã¢ã®ãããªæ°ããèšèªã«ãšã£ãŠããœãããŠã§ã¢ã®äžçã®ä»ã®éšåãšã¹ã ãŒãºã«è©±ãããšã¯éåžžã«éèŠã§ãã
ã¹ãã£ãŒãã³ãç§ã¯ã²ãã¿ãŒ/ã»ãã¿ãŒã«ã€ããŠ100ïŒ ç¢ºä¿¡ãæãŠãŸãããããã¯ããã«ççŸã«ã€ãªããã®ã§ã¯ãªãããšå¿é ããŠããããã§ãããä»ã®ãŠãŒã¹ã±ãŒã¹ã«ã¯åæããŸãã ãã®äžãGtk.jlã«ã¯ãæ§æã®æ©æµãåããåçããããã£ããããŸãã ç§ã®å人çãªãæ°ã«å ¥ãã¯ãStefanãïŒ5842ã§æŠèª¬ããåæåã®å®è£ ã§ãã
ãã³ãã ãã®åé¡ã®é²è¡ã劚ããŠããã®ã¯äœã§ããïŒ æ±ºå®ãå¿ èŠã§ããããããšããã®åé¡ã¯ãŸã è¡ãããŠããªãä»ã®å éšå€æŽã«äŸåããŠããŸããããããšãã³ãŒãã£ã³ã°ã ãã§ããïŒ
ãã®åé¡ã®é²è¡ã劚ããŠããã®ã¯äœã§ããïŒ
ä»äºãããŠãã人ãšããããæ£ããããšãã©ããã«ã€ããŠèºèºããŠãã人ã
@ihnortonã¯ãã§ã«ïŒ5848ã§åæãã©ããå®è£ ãè¡ã£ãŠããããšã«æ³šæããŠãã ããã ãããæãŸããæ©èœã§ãããã©ããã«ã€ããŠãJuliaã³ã¢ããŒã ããã®æ確ãªå£°æãå¿ èŠãªãããäœæ¥ãåæ»ããŠãããšæããŸãã
ç§ã¯ããã«ä¹ã£ãŠããŸãã @JeffBezansonã¯ãã§ã³ã¹ã«ããããã§ãã
ç§ã«ãšã£ãŠããã®æ©èœãããã°ã倧èŠæš¡ãªPythonã³ãŒãããŒã¹ããJuliaãžã®ç§»è¡ãç°¡åã«ãªããŸãã åŠçã«èª¬æãããšãPythonã³ãŒãã䜿çšããå Žåã以åãšã¯ãŸã£ããç°ãªãæ§æãå¿ èŠã«ãªãããããããå°é£ã«ãªãå¯èœæ§ããããŸãã
ãã®ã¹ã¬ããã§äžèšã®è°è«ããããŸãããããŸã å®å
šãªåæã¯èŠãããŸããã çŸåšããããªãã¯APIã¯é¢æ°/ã¡ãœããã§æ§æãããŠããããã©ã€ããŒãAPIã¯è€ååã®ãã£ãŒã«ãã§ãããšèãã人ãããŸãã ãã®ã¹ããŒã ããã¯éåžžã«ãŸããªäŸå€ãèŠãããŸãã ïŒLUå解ã§.U
ïŒïŒ
Pythonã®ã¢ã¯ã»ã¹ãšåæåã¯ããã圹ç«ã€å Žåã§ãããããããã¯ç§ãããã«å察ããŠãããšããæå³ã§ã¯ãããŸããã ããã§ããããã§ã®å¿ èŠæ§ãã©ãã»ã©ç·æ¥ã§ãããããããŠéçºãµã€ã¯ã«ã®çµããã«ãããããã·ã¥ããããšãè³¢æã§ãããã©ãããçåèŠããããšãã§ããŸãã
@ ufechner7 ãç§ã¯äž»ãªåæ©ãèšèªéã®çžäºéçšã§ããããšã«åæããŸãã @tknopp ãç§ãã¡ã¯ãã®ãããªããšã«ã€ããŠå šäŒäžèŽã§åæããããšã¯æ±ºããŠãããŸããã æçµçã«ã¯ã @ JeffBezansonãš@StefanKarpinskiã決å®ããããšã«ãªããŸãã
ããããã®å€ãã¯ããžã§ãã®ææªã®æªå€¢ãããããªããšç§ãæ³åããããšã«èµ·å ããŠãããšæããŸãã
module DotOrientedProgramming
Base.getfield(x, ::Field{:size}) = size(x)
Base.getfield(x, ::Field{:length}) = length(x)
â®
end
ç§ããããéåžžã«å«ããŸã-ãã®ããã«ããã誀çšããããšã決å®ããããã±ãŒãžã¯ãç§èªèº«ãå«ãã·ã¹ãã ã®_ãã¹ãŠã®_ã¿ââã€ãã«èª€çšã課ããŸãã ãã®æ©èœã¯éåžžã«åŒ·åã§ãJuliaã®èšè¿°æ¹æ³ãå€æŽããŸãã ããè¯ããããŠïŒããããããããããŸãããã°ããã§ã¯ãªãïŒããæªãã
ã¯ãã確ãã«ã¹ãã£ãŒãã³ãããã¯ç§ããé©åã«è¡šçŸãããŠããªããããããŸããã ç§ãèšãããã£ãã®ã¯ããã®å€æŽãèšèªã®é²åã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããšããããšã§ãã ãŸããå¥ã®åé¡ã§åãäžããŠãããæ£åŒãªã€ã³ã¿ãŒãã§ã€ã¹ãã®ã¢ã€ãã¢ã¯ã .
ãªãŒããŒããŒãå¯èœã«ããããšã«ãã圱é¿ãåããŠããŸãã ããã§ãã @ JeffBezansonãš@StefanKarpinskiã«æ±ºããããŠãã ããã ããã§ãåé¡ã¯ã決å®ãä»ããå®æœããå¿
èŠããããã©ããã§ã...
ãã®äŸ¡å€ã«ã€ããŠã¯ãã»ãšãã©ãã¹ãŠã®æ§æããªãŒããŒããŒãå¯èœã«ããæåã«äŸåããŠãããŸãã«ã倧ããã«ãªããããªãããã«ããããšã奜ãããã«ãªããŸããã
+1 ã ããã«ã¯ã call
ãªãŒããŒããŒãã«é¡äŒŒãã匷åãªå²åŠçïŒãããŠããããå®çšçãª...ïŒããããšæããŸãã ããã¥ã¢ã«ã«ã¯ã Don't do stupid stuff: we won't optimize that
ãšããã¿ã€ãã«ã®ã»ã¯ã·ã§ã³ãå¿
èŠã§ãã ïŒãã¡ããã call
ãªãŒããŒããŒãã¯ãããã©ãŒãã³ã¹äžã®çç±ã®äžéšã§ããããæªçšãããå¯èœæ§ããããŸãïŒ
å šäœçã«ãç§ã¯è³æã§ãã èåŸ ã®å¯èœæ§ã¯ç§ã®æ倧ã®å¿é ã§ã¯ãããŸããã ç§ã«ãšã£ãŠå€§ããªåé¡ã¯
a..b
ã¯ããŸã奜ãã§ã¯ãããŸããããããã®åé¡ã¯ãäž¡æ¹ã«åãæ§æã䜿çšããããšã§äžæ°ã«è§£æ±ºã§ããŸãããçŸæç¹ã§ã¢ãžã¥ãŒã«ã«.
以å€ã®ãã®ã䜿çšããããšãæ³åããããšã¯ã»ãŒäžå¯èœã§ãã _å
éšçã«_ã¢ãžã¥ãŒã«åç
§ã®æœè±¡æ§æã¯ééããªããããŸãã ãããæããã«ããè¯ãæ¹æ³ããªãã£ãããããã¯ã€ã©ã€ã©ããã§ãããã
ãã®è³ªåã«å¯Ÿããç§ã®2ã»ã³ãïŒä¿®é£Ÿåã«:
ã䜿çšããŠã¿ãŸãããïŒ ããã¯ãåæ§ã®ç®çã§ãã§ã«äœ¿çšãããŠããŸãã
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 ++ã¹ã¿ã€ã«ïŒã¯ãç§ã«ã¯åé·ãããããã§ãã
:
ã¯ããã§ã«Juliaã§æãéè² è·ã«ãªã£ãŠããã·ã³ãã«ãªã®ã§ã圹ã«ç«ããªãã®ã§ã¯ãªãããšæããŸãã
module.name
ããªãŒããŒããŒãã§ããªãããã«ããããšã§ã修食ãããåœåã®åé¡ãåçŽåã§ããŸããïŒ ã¢ãžã¥ãŒã«ãã€ã³ãã£ã³ã°ã¯äžå®ã§ãããããåãã»ãã³ãã£ã¯ã¹ãç¶æã§ããŸããã a.b
ã®LHSãã¢ãžã¥ãŒã«ã§ããããšãããããšããã«ã修食åã«ãã¯ã¢ããã®éåžžã®ããžãã¯ããã¹ãŠç絡ããŸãã ã¢ãžã¥ãŒã«ã§ååãæ€çŽ¢ããããšã®æå³ã人ã
ãäžæžãã§ããªãããã«ããããšã¯ããªãåççã ãšæããŸãã
ç§ã¯å®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹çšã®a..b
æ§æã奜ãã§ãã ããã«å¯Ÿããããªãã®ç°è°ã¯äœã§ããïŒ
äœè«ã§ãããããã€ãã®æ©èœèšèªã®ãããªã€ã³ããŒããªã¹ãã«( )
ã䜿çšãããã£ãã®ã§ããã ããªãã¡ïŒ
import Base (call, show, size)
ç§ã®çç±ã¯ãã³ã³ãããªãã·ã§ã³ã«ããŠãæ«å°Ÿã®ã³ã³ããèš±å¯ã§ããããã§ãã ã€ã³ããŒããããååã®ãã¹ãŠã«æ«å°Ÿã®ã³ã³ããå¿ èŠãªã®ã¯æ¬åœã«ãã£ãšãããã§ãã
ã¯ãã a.b
ãã a
ãã¢ãžã¥ãŒã«ã®å Žåã¯ãæåã«ã¢ãžã¥ãŒã«æ€çŽ¢ãå®è¡ããããšããæå³ã«ããå¯èœæ§ã«ã€ããŠèšåããããšããŠããŸããã ããã¯åœ¹ç«ã€ãããããŸããããããŠç§ãã¡ã¯ç¢ºãã«ã¢ãžã¥ãŒã«ã«ãã¯ã¢ããã®æå³ãäžæžãããããããŸããã ãã ãã a.b
ãåŒã³åºãgetfield(a,:b)
ãšããŠè¡šãããšãã§ããªããããè€éãªã³ã¹ããããããŸãã æé»ã®åå²ãæã€ç¹å¥ãªASTããŒãã§ããå¿
èŠããããŸãã ãã¡ããã_explicit_ãã©ã³ãã䜿çšããããšãã§ããŸãããããã«ããASTã®è¥å€§åãå¿é
ã§ãã
ããã³ããšã³ããšããã¯ãšã³ãã®ããŒãºã®éã®ãã®ãããªå€§ããªå¯Ÿç«ããæãåºãç°¡åãªæ¹æ³ã¯ãªãããã§ãã
ä»ã®ã¿ããªãa..b
奜ããªããç§ã¯ãããšäžç·ã«æ®ããããšãåŠã¶ããšãã§ãããšæããŸãã ããã¯ãŸã£ããç°ãªãäœããããããééãæå³ããããã«ç§ã«ã¯èŠããŸãã
a..b
ãå«ãã§ããããªããããå¿
èŠã«ãªãã®ãçåã«æããŸãã ãã®ã¹ã¬ãããèªããšããªãŒããŒããŒãã¯èšèªã©ãããŒãšå®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹ãäžèŠãªåçãŠãŒã¹ã±ãŒã¹ã§ã®ã¿äœ¿çšããããšããå°è±¡ãåããŸãã
ããæç¹ã§ããªããžã§ã¯ããæäœããããã«ãªããžã§ã¯ãã®è¡šçŸã«ã¢ã¯ã»ã¹ããå¿
èŠãããããã§ãã ããã¯æ¯èŒçãŸãã§ããã get_actual_field(a,:x)
ããã«éãå¯èœæ§ããããšäž»åŒµãã人ããããããããŸããããããã¯æ§æãæããªãæäœãšããŠã¯éèŠãããããã§ãã
ããããŸããããããã¯ã誰ã«ã䜿çšããŠã»ãããªãæ§æãæ¢ããŠããããã«èãããŸããïŒ
..
ãæäŸããªãããš
ããããããæåããã°ã©ãã³ã°ãã©ã®ããã«åŠšããã®ãããããŸããã äžèšã®@mbaumanã®äŸãåŒãç¶ãå®è¡ã§ããŸãã
a..b
æ§æã¯åºéã®ããã«èŠããŸããïŒç§ã¯ããããã®ããã«äœ¿çšããŸããïŒãåºéæŒç®ã«ç¬èªã®å
¥åæ§æãå¿
èŠã ãšã¯æããŸããã Interval(a,b)
æžãã ãã§ããããã¯äœå¹Žãã®éãžã¥ãªã¢ã®æŒç®åã§ããã誰ããããã»ãšãã©äœã«ã䜿çšããŠããªãã®ã§ãä»ã«èª°ããã®æ§æã䜿çšããããšæãããšã¯ã»ãšãã©ãããŸããã ãŸãããã£ãŒã«ãã¢ã¯ã»ã¹ã®ããã«èŠããŸãã
ããã«å¯Ÿãã1ã€ã®éã®è£æã¡ã¯ãæãããmodule_name
ãm..name
眮ãæããããšãã§ãããšããããšã§ãã ã¢ãžã¥ãŒã«ãªããžã§ã¯ãã®ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ã§ããªãããšã¯ãããŒã§ããã
ã¯ãã
a.b
ããa
ãã¢ãžã¥ãŒã«ã®å Žåã¯ãæåã«ã¢ãžã¥ãŒã«æ€çŽ¢ãå®è¡ããããšããæå³ã«ããå¯èœæ§ã«ã€ããŠèšåããããšããŠããŸããã ããã¯åœ¹ç«ã€ãããããŸããããããŠç§ãã¡ã¯ç¢ºãã«ã¢ãžã¥ãŒã«ã«ãã¯ã¢ããã®æå³ãäžæžãããããããŸããã ãã ããa.b
ãåŒã³åºãgetfield(a,:b)
ãšããŠè¡šãããšãã§ããªããããè€éãªã³ã¹ããããããŸãã æé»ã®åå²ãæã€ç¹å¥ãªASTããŒãã§ããå¿ èŠããããŸãã ãã¡ããã_explicit_ãã©ã³ãã䜿çšããããšãã§ããŸãããããã«ããASTã®è¥å€§åãå¿é ã§ãã
a.b
ç¡æ¡ä»¶ã«getfield(a,:b)
ãæå³ãã getfield(::Module, ::Field)
ã¡ãœãããšäº€å·®ããã¡ãœãããgetfield
ã«è¿œå ããããšããšã©ãŒã«ããããšã§ããããåŠçã§ããŸããïŒ ããã¯ããã®åäœã匷å¶ããããã®å¥åŠãªæ¹æ³ã®ãããªãã®ã§ãããæçµçã«ã¯åãå¹æããããŸãã 次ã«ãäžããããšã¯ãããŒãããããã«ãããè¡ãããšãã§ããªãããšãããã£ãŠãããšããäºå®ã䜿çšããŠã修食åã®æ€çŽ¢ã«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})
ãå®çŸ©ãããŠããå Žåã a.b
ã¯åçããŒãžã§ã³ã§ãã ãã®å Žåãå®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹ã¯ã·ã£ããŠãããå¯èœæ§ããããŸãç§ã®è³ªåã¯ãã·ã£ããŠã€ã³ã°ãããŸããããªããŠãŒã¹ã±ãŒã¹ããããã©ããã§ããã
ã¯ã; pyobject.x
ãå®çŸ©ããŠããã¹ãŠã®x
ã«ã€ããŠã x
ãåžžã«pyobjectã®ãã£ã¯ã·ã§ããªã§æ€çŽ¢ãããããã«ããããšãã§ããŸãã 次ã«ãpyobjectã®juliaãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããã«å¥ã®ã¡ã«ããºã ãå¿
èŠã§ãã
ãããããã§ãã®ãã¹ãŠãç¡ãïŒ ã©ããããããã
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
ã¯ããããã¯_ã§ããŸã_ãããã¹ãŠã®ãªããžã§ã¯ããããããããã§ã¯ãããŸããã ãã¹ãŠã®ãã£ãŒã«ããã€ã³ã¿ãŒã»ããããããã«getfield(a::A, ::Field)
ãå®çŸ©ããã人ãããŸãã
ããããŸãããä»ã¯ããããŸããã ãã¹ãŠã®åçãŠãŒã¹ã±ãŒã¹ã§ã¯getfield(a::A, ::Field)
ãå¿
èŠã«ãªããããå
éšãã£ãŒã«ããåŒã³åºãæ¹æ³ãå¿
èŠã«ãªããŸãã
次ã«ãç§ã®èãã§ã¯ã誰ãããããç
©ãããå®çšçãªãŠãŒã¹ã±ãŒã¹ãèŠã€ããªãéãã Core.getfield
ã§ååã§ãã
ããã¯ããããåœç¶ã®ããšã§ããã setfield!
ãªãŒããŒã©ã€ããèš±å¯ããŸãããïŒ è¡ãåã«ãªãããŒã¿ããŒã¹ã«å¯å€ãã¥ãŒãå
¬éããããã«ããããæ¬åœã«å¿
èŠã§ãã
ã¯ãããããç§ã®å°è±¡ã§ããã
[OK]ããç§èŠã䜿çšãããã©ãã..
å®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹ã®ãããŸãã¯Core.getfield
ããã®ãããªå€§ããããšã§ã¯ãããŸããã äžè¬çãªæ©èœãå®éšçãªãã®ãšããŠçŽ¹ä»ãããããå€æŽããå¯èœæ§ããããŸãã
åé¡ã¯ãããã0.4ã®æéæ ã«åãŸããã©ããã§ãã ããã§ãããã¯æçµçãªå®è£ ã«è¿ãïŒ5848ã§ãããã¢ãžã¥ãŒã«ã¯è§£æ±ºå¯èœã§ããïŒ
@johnmyleswhite ïŒããã察称ã«ãã setfield!
èš±å¯ããããšã«ãæ祚ããŸãã Gtk.jlã§ã¯äž¡æ¹ã䜿çšããŸãã
ãã®æ©èœã䜿çšããå Žåãšäœ¿çšããªãå Žåã®ã«ãŒã«ã¯æ確ã§ã¯ãªãããã§ãã ã¡ãœãã/ãã£ãŒã«ããåçã«æ€çŽ¢ããå¿
èŠããããããJuliaã¡ãœãã/ã³ã³ããžããã¿ã€ãã«ããããšã¯ã§ããªãïŒçµæã®æ§æã¯Pythonã«è¿ãïŒPyCallã®ãã€ã³ããããããŸãã ãããããªããããGtk.jlã«äœ¿çšããã®ã§ããããïŒ ããã¯ãã£ãŠèµ·åããå Žåã¯foo.bar = x
ã®ä»£ããã«setbar!(foo, x)
ããããŠæšæºãžã¥ãªã¢ã»ã³ãŒãã¯invitablyããŸãã«ããã®ãã¿ãŒã³ã䜿çšããŠèµ·åããŸãïŒããã¯ç§ãã¡ãäœããããã®ã§ããïŒ ãã¶ããããããããŸããããããã«ã€ããŠæ確ã«ããŸãããã
ãã®æ©èœã䜿çšããŠãæœè±¡ïŒããã³å
·è±¡ãïŒã¿ã€ãçšã«å®çŸ©ãããããããã£ã²ãã¿ãŒããã³ã»ãã¿ãŒãå®è£
ããããšã¯èš±å®¹/æšå¥šãããŸããïŒ
ããã«ãããããŸããŸãªã¿ã€ãã®ããŸããŸãªã¢ãžã¥ãŒã«ããããããã£ãååŸããããã«äœ¿çšãããã¡ãœããã®ååã®è¡çªãåé¿ã§ãããšæããŸãã
åç §ïŒ https ïŒ ïŒ //groups.google.com/forum/#ïŒmsg / julia -users / p5-lVNlDC8U / 6PYcvvsg29UJ
@nalimilan ïŒGtkã«ã¯ãã²ãã¿ãŒ/ã»ãã¿ãŒã§ã¯ãªããåçãªããããã£ã·ã¹ãã ããããŸãã
@tknoppããã
ãã®æç¹ã§ã®ç§ã®èŠè§£ã§ã¯ïŒãããŠæ£ããã«ãŒã«ãç解ããããã«ãããå°ãå®éšããå¿
èŠããããšæããŸãïŒã f
ãããã®ãããªäžè¬çãªã¹ã¿ã³ãã¢ãã³ã®æŠå¿µãšããŠæå³ãããå Žåã f(x)
æ¹ãåªããŠããŸãã f
ãå®éã«ã¯x
ç¬ç«ããŠããªãå Žåã¯ã x.f
ã䜿çšããå¿
èŠããããŸãã åã®äŸãããã«åœãŠã¯ããããã«ãäžè¬çãªstep
é¢æ°ã䜿çšããããšã¯ãã»ãšãã©ã®ãã¯ãã«ãšã³ã¬ã¯ã·ã§ã³ã«ã¹ãããã®æŠå¿µããªããããããŸã圹ã«ç«ã¡ãŸãããç¯å²ãããå Žåã«ã®ã¿æå³ããããŸããããçš®ã®ã ãããã£ãŠã x.step
ç¯å²x
ã®ã¹ããããååŸããæ¹æ³ãšããŠäœ¿çšããŠãåé¡ãããŸããã ã¡ãã£ãšããå€æã®åŒã³ããã§ããã人çã¯ãããã§ãã£ã±ãã ãšæããŸãã
..
ã¯ç§ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããªãããã奜ãã§ã¯ãããŸããã foo.bar.
ã©ãã§ããïŒæåŸã®äœåãªãããã¯ãçŽæ¥ã¢ã¯ã»ã¹ã§ããããã«åºå®ããŸãã
ãŠãã³ãŒãèšå·ãéžæããããšãã§ããŸãïŒãŸã ããããæ®ã£ãŠããŸã...
@GlenHertz ããã£ãŒã«ãã¢ã¯ã»ã¹ããã§ãŒã³ããå¿ èŠãããå Žåã¯å®éã«ã¯æ©èœããŸããã
@simonbyrne ãç§ã¯äžè¬çã«ãUnicodeã®äœ¿çšãå¿ èŠãšããã³ã¢èšèªãŸãã¯æšæºã©ã€ãã©ãªã«äœãã
ãã®æç¹ã§ã®ç§ã®èŠè§£ã§ã¯ïŒãããŠæ£ããã«ãŒã«ãç解ããããã«ãããå°ãå®éšããå¿ èŠããããšæããŸãïŒãfããé·ããã®ãããªäžè¬çãªã¹ã¿ã³ãã¢ãã³ã®æŠå¿µãšããŠæå³ãããå Žåã¯fïŒxïŒãåªããŠããŸãããxfã䜿çšããå¿ èŠããããŸãfãxããå®éã«ç¬ç«ããŠããªãå Žåã
ãã®æ©èœã䜿çšããããã®ç§ã®å人çãªã«ãŒã«ã¯æ¬¡ã®ããã«ãªããŸããããã¯ãèšèªã®çžäºéçšããŸãã¯ãã»ãŒãã£ãŒã«ãããŸãã¯ãæ¡åŒµãã£ãŒã«ããã®ããããã§ãããã®ã«ã®ã¿äœ¿çšããŠãã ããã ããšãã°ãããã䜿çšããŠãã¿ã€ãå ã®ãã¹ãŠã®ãã£ãŒã«ãã®å€ã«äŸåãããã£ãã·ã¥ãæŽæ°ã§ããŸãã
ãã®æ©èœã«ã€ããŠç§ãæã£ãŠãã1ã€ã®å€§ããªè³ªåïŒããã¯åæšè«ãšã©ã®ããã«çžäºäœçšããŸããïŒ s
ããŸããŸãªå€ã«å¯ŸããŠããŸããŸãªåã®åºåãçæããé¢æ°getfield(x::T, s::Symbol)
ãå®çŸ©ããããšããŠããããã§ãã getfield
ãéæ³ã§ããããã«ã®ã¿æ©èœããŸããïŒ ããã°ã©ã ã®ä»»æã®æç¹ã§ãåºå®x
ããã³s
ã®getfield(x, s)
ã®åºåãåå®çŸ©ã§ããŸããïŒ ãããããªããããã¯ã©ã®ããã«ã¿ã€ããåå®çŸ©ããããšãã§ããªãããšãšåã¿åã£ãŠããŸããïŒ
s
ããŸããŸãªå€ã«å¯ŸããŠããŸããŸãªåã®åºåãçæããé¢æ°getfield(x::T, s::Symbol)
ãå®çŸ©ããããšããŠããããã§ãã
ãã®ããããããgetfield{s}(x::T, f::Field{s})
ãšããŠè¡šçŸããèšç»ããããŸããããã§ã s
ã¯ã·ã³ãã«ã§ãã
ç§ã¯ãããéããŠããŸããã ç§ããŸã£ããã«ããŠãããŠããããšãã
@nalimilan ïŒã¯ãããªãŒããŒããŒãããããã£ãŒã«ãã¯åçããããã£ã«ã®ã¿äœ¿çšãããŸãã ããããžã§ã ãœã³ãããã«åãçµã¿ããæ¹æ³ã§ãããããã¯è¯ãããšã ãšæããŸãã ãã¹ãŠã®å®éã®ã²ãã¿ãŒãšã»ãã¿ãŒã¯èªåçæãããŸããããã¹ãŠã®get / setã®ååããªããŠãæ©èœããŸãã GAccessor
ã¢ãžã¥ãŒã«ã§ã®ã©ã€ãïŒçãG_
ïŒ
æ§æã§ã¯ãå®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹ã«<-
ã䜿çšããŠã¿ãŸãããïŒ
ããã¯ãlamdaã«äœ¿çšãããŠããc ++ã®->
ã«äŒŒãŠããŸããã <-
ã¯çŸåšäœ¿çšãããŠããŸããã
ã¿ã€ãããèªã¿åãããšãã§ããå€ãçŽæ¥ååŸããŸãã
ããã¯ãŸã ééã眮ããŠããã䜿ããã人ã®ããã«æªäœ¿çšã®ãŸãŸã«ãªããç§ãä»ã®ãšããèããããšãã§ããä»ã®çšéããªãæªäœ¿çšã®ãã¢ã䜿ãæãããŠããŸãã§ãããã
ãã£ãŒã«ãã¢ã¯ã»ã¹ã«Rã®å²ãåœãŠè¡šèšã䜿çšããªãã§ãã ããã
->ã䜿çšããŠC / C ++ãçŽæ¥ãã©ãŒãªã³ã°ãã次ã®æ°ããæ§æãååŸããããšãã§ããŸãã
å¿åé¢æ°ã ç§ã¯å¿åé¢æ°ãããŸãæ°ã«ããŸããã§ãã
å°ãç°¡æœã§èªããªãã®ã§æ§æã å€å代ããã«ã§ãã
äœãã®ãããªãã®
funcïŒxïŒx ^ 2 end
ãŸãã¯ããé·ããããäžè²«æ§ã®ãã
é¢æ°ïŒxïŒx ^ 2çµäº
ãããããå¿
èŠã®ãªãåªããæ§æãèãåºãæ¹æ³ãããã§ãããã
çµããã䜿çšããŸãã
è°è«ãããŸãå€ããªãã§ãã ããããããããã¯ééããªãçã«ããªã£ãŠããŸã
->å®éã®ãã£ãŒã«ãã¢ã¯ã»ã¹ã«äœ¿çšããŸãã
2015幎1æ28æ¥æ°Žææ¥åå8æ49åããžã§ã³ãã€ã«ãºãã¯ã€ã[email protected]
æžããŸããïŒ
ãã£ãŒã«ãã¢ã¯ã»ã¹ã«Rã®å²ãåœãŠè¡šèšã䜿çšããªãã§ãã ããã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/1974#issuecomment-71857083 ã
@quinnj ïŒ func (x) x^2 end
ãã§ã«æ©èœããŠããŸãã ããããç¡åé¢æ°ã®æ§æãéåžžã«ç°¡æœã§ãããšäŸ¿å©ã§ãã map(x->x^2, 1:10)
ãã£ãŒã«ãã¢ã¯ã»ã¹ã«ç¹å¥ãªæ§æã¯å¿
èŠãªããšæããŸãïŒ @simonbyrneãææ¡ããUnicodeæåã¯ãªãã·ã§ã³ãšåæ§ã«åé¡ãããŸããïŒã x -> x^2
ã倱ããããããŸããã
ãã®åé¡ã¯ãŸã éããŠãã/ä¿çäžã®è°è«ã®ããã§ããïŒ ãããæŒç®åã«é¢ããããŸããŸãªã³ã¡ã³ãããã¹ãŠèªãã§èå³æ·±ããªããŸããã
ä»ã®æ°ããæŒç®åããŒã¯ã³ãè¿œå ããææ¡ã¯ãããŸããïŒ :>
ãããªãã®ã䜿çšããããšã¯è¯ãéžæè¢ãããããŸããã |>
ãšé¡äŒŒããŠããããããã€ãã£ããªJulia_feel_ãæã£ãŠããå¯èœæ§ããããŸãã
c = foo.a + foo.b
pyobj:>obj:>process(c)
ããã§ãæžãã®ã¯ã¯ããã«ç°¡åã§ããïŒ
pyobj[:obj][:procees](c)
ãŸãã¯æ¯èŒïŒ
someobj :> array |> length
# vs
length(get_array(someobj))
ç§ã¯ãžã¥ãªã¢ã«äžæ £ãã§ãããå€éãã£ã¹ãããã®ã¢ãããŒãã«ããã«åŒ·ãè©äŸ¡ãåŸãŸããã ãªããžã§ã¯ãæåããã°ã©ãã³ã°ïŒç¹ã«ç§åŠããã°ã©ãã³ã°ã®å ŽåïŒã¯ãå€ãã®ã¿ã¹ã¯ãããé¢åã«ããŸãã ãªããžã§ã¯ãæåãã©ãã€ã /æ§æããžã¥ãªã¢ã®ã¹ã¿ã€ã«ã®éçºã«æªåœ±é¿ãäžããã®ã§ã¯ãªãããšå¿é ããŠããŸãã
ãŸãã¯ãæååã®ã€ã³ã¿ãŒã³ãåŒçšãå¿ããã®ã§ã次ã®ããã«ããŸãã
someobj <: field_name |> length
@elcritch ã <:
ã¯çŸåšãJuliaã®ã issubtype ofãæŒç®åãšããŠäœ¿çšãããŠããã :>
ãå°å
¥ãããå Žåããã®ããã«ã¿ã€ãé¢é£ã®äœãã«äœ¿çšããããšæãå¯èœæ§ããããŸããéºç£ã
instance..member
ãåé¡ã«ãªãå Žåã¯ãããã€ãã®å¯èœæ§ããããŸãã ç®ãä¿è·ããŠãã ããïŒ ãããã®ãã¹ãŠãããæªãå¯èœæ§ããããŸãïŒ
instance^.member
ïŒã«ããããããïŒinstance~.member
ïŒãã«ããããïŒinstance:.member
ïŒã³ãã³ãããïŒinstance*.member
ïŒã¹ã¿ãŒãããïŒinstance-.member
ïŒããã·ã¥ãããïŒ[email protected]
ïŒã¢ããããŒã¯ãããïŒinstance&.member
ïŒã¢ã³ãã¢ãããïŒinstance$.member
ïŒãã«ãããïŒinstance<.>member
ïŒå®å®è¹ãããïŒç§ã¯æ£çŽã«èšã£ãŠãïŒaïŒ ..
ã¯ååã«è¯ãããã ããïŒbïŒããã¯åžžã«èšèªã®ãããŸããªã³ãŒããŒã«ãªãã®ã§ãèŠæ ããè¯ããã©ããã¯åé¡ã§ã¯ãªããšæããŸãã ã»ãšãã©ã®äººã¯instance.member
ã䜿çšããŸããããã¯ããã£ãŒã«ããŸãã¯getfield
ã¡ãœããã®ããããã®ã¿ããããäž¡æ¹ã¯ãªãããã§ãã
ïŒããã«èšãã°ãã¡ã³ããŒãšã¡ãœããã®äž¡æ¹ã䜿çšãããã»ãšãã©ã®äººã¯ããããã..
ã«ã€ããŠåŠã¶ããšããæ°ã«ããªãã§ãããã圌ãã¯foo.member
ã¡ãœãããå®çŸ©ãããæ¬ç©ããšããååãä»ããã ãã§ãã "ãã£ãŒã«ãfoo._member
ãééããªããããã¯ãšã«ããããè¯ãã¹ã¿ã€ã«ã§ããã€ãŸãã type
å®çŸ©ãèªããšã _member
ãäœãã§ã¯ãªãããšãããã«ããããŸããçŽæ¥ã¢ã¯ã»ã¹ã§ããããŸãã¯ã¢ã¯ã»ã¹ããå¿
èŠããããŸããããã¯ã貎éãªå¥èªç¹ã®äžåç£ã䜿çšããã®ã§ã¯ãªãã ..
:.
ããã«éãææ§ãªãã®ã«ããããšã䞻匵ããŸããïŒ
..
ãäžçœ®åºéæŒç®åãšããŠäœ¿çšããæ©èœããªãã®ã§ãããéè² è·ã®ãã£ãŒã«ãã¢ã¯ã»ã¹ã¯äŸ¡å€ã®ãããã¬ãŒããªãã§ãã ã³ãã³ã«ãã以äžæå³ãè¿œå ããããšãå°ãæããŠããŸããã :.
ã¯ããã»ã©æªãã¯ãªãããã§ãã
:.
ã¯ãçŸåšsymbol(".")
ã«å¯ŸããŠå®éã«æå¹ãªæ§æã§ãããããããã䜿çšããã®ã¯é©åã§ã¯ãªãå¯èœæ§ãããããšã«æ³šæããŠãã ããã ..
ãæœåšçã«æçšã§ãããšããç¹ã¯ããç解ãããŠããŸãã ã ããã»ãšãã©äœ¿çšããªãæ§æã§ãããç¡é§ã«ãã¹ãã§ã¯ãããŸããã @.
ãããªãã£ãšéããã®ã§è¡ãã®ã¯å®å
šã«ããããã§ãïŒ .
ã¯æå¹ãªãã¯ãåã§ã¯ãªããèå¥åãéå§ããããšãã§ããªããããããã¯äœããšç«¶åããããã«ã¯èŠããŸããïŒã ç¹°ãè¿ãã«ãªããŸãããããã¯ãžã¥ãªã¢ã®éåžžã«ãããŸããªã³ãŒããŒã«ãªãããããããã«ããããšãã䟡å€ã¯ãããŸããã
..
ã䜿çšããŠãããå®è¡ããæœåšçãªéããç¡èŠããããšãžã®+1
ããããšã«ãã..
è¡ããŸãããããã..
䜿çšã§ãããªããããã¯_range_ã³ã³ã¹ãã©ã¯ã¿ãŒã ãšæããŸãããã³ãã³ã䜿ã£ãŠãã§ã«ããã«ãããŸãã start:stop
ã
æåŸã®ãã³ãïŒ .:
ã©ãã§ããïŒ abãaãïŒbïŒãaãïŒïŒbïŒ_and_ a.:bãæã€ã®ã¯åŸ®åŠãããŸããïŒ
@hayd ãããã¯åŸ®åŠãããŠå¶ç¶ã«äœ¿ããããããã§ãã
@ ihnorton ãïŒ5848ã®ããŒãžã§ã³ã埩掻ãããå¯èœæ§ã¯ãããŸããïŒ æ§æã®è³ªåããã³ãããŠã Core.getfield(x, Field{y})
ã䜿çšããŠãå®éã®ããã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã
Core.getfield
æ§æã«ã€ããŠã®ãã€ã¯ã·ã§ããã¯ããŠãããå®è³ªçãªè³ªåãæ®ã£ãŠããŸããïŒ
ïŒ5848ã§ã @ tknoppã¯ããã¹ãŠããªãŒããŒããŒãå¯èœã«ããå¿
èŠããããšãã@JeffBezansonã®ææ¡ãšã¯å¯Ÿç
§çã«ããå®éã®ããã£ãŒã«ãã¢ã¯ã»ã¹ã®ã¿ããªãŒããŒããŒãå¯èœã«ããããšãææ¡ããŸããã å人çã«ã¯ãèšèªã®åçãªæ§è³ªã«ããå®è£
ãã¯ããã«è€éã«ãªãããšãé€ããŠãå®éã®ãã£ãŒã«ãããªãŒããŒããŒãã§ããªãããã«ããããšæããŸãã ããšãã°ããeverything-overloadableãã¢ãããŒãã§ã¯ã x::Vector{Any}
å Žåã x[i].y
ãå®è¡ãããšã getfield(x[i], Field{:y})
ãšè§£éã§ãããã£ã¹ãããã·ã¹ãã ã¯y
ãã©ããã«é¢ä¿ãªãæ£ããããšãå®è¡ããŸãã getfield
ã®ã¿ãåŒã³åºãããå Žåãcodegenã¯x[i]
ã©ã³ã¿ã€ã ãã§ãã¯ã®ããã«ãã£ã¹ãããã·ã¹ãã ã®ãããã¥ã¢ãµãã»ãããå®è£
ããå¿
èŠããããŸãã
ãã1ã€ã®è³ªåã¯ã Module.foo
ããªãŒããŒããŒãå¯èœã«ãããã©ããgetfield
ã䜿çšããããšã«ã¯äžå®ã®äžè²«æ§ããããäžèšã®Vector{Any}
äŸã«ã¯Module
é
åã¡ã³ããŒãå«ãŸããå¯èœæ§ãããããããã®å ŽåãåŠçããå¿
èŠããããŸãããšã«ããã äžæ¹ã @ JeffBezansonã¯ãããã«ããã³ã³ãã€ã«ãå°é£ã«ãªãã function Base.sum(...)
ãããªå®£èšã®åäœãå°é£ã«ãªãå¯èœæ§ããããšææããŸããã ç§ã®å¥œã¿ã¯ãå°ãªããšãä»ã®ãšãããã³ã³ãã€ã©ãModule
åäœããŠããããšãç¥ã£ãŠããå ŽåïŒã€ãŸãã Vector{Any}
ã¯ãªãïŒã«ã Module.foo
ããªãŒããŒããŒãã§ããªãããã«ããããšã§ãã ; äœãå€æŽããããã«ã€ããŠä¿å®çã«ããããã«ãããããªäžäžèŽã¯äŸ¡å€ãããããã«æãããŸãã
Module.foo
ãªãŒããŒããŒããèš±å¯ããªãå Žåã¯+1ã
ããã§ãã£ã€ã ã鳎ããããã«ããªããžã§ã¯ãæåããã°ã©ãã³ã°ãšæ§æãå®éã«FPããåªããŠããç§åŠèšç®ã®1ã€ã®é åã¯ããšãŒãžã§ã³ãããŒã¹ã®ã¢ããªã³ã°ã§ãã ãšãŒãžã§ã³ãéå±€ãèšå®ããããã®å ·äœçã§å€éç¶æ¿ãæããã§ãããJuliaã®è»œéã§é«éãªæœè±¡åãšè¿ éãªãããã¿ã€ãã³ã°ã¯é©ãã¹ããã®ã§ã-ãã§ã«ããã€ãã®ABMãã¬ãŒã ã¯ãŒã¯ãç»å ŽããŠããŸãã
ABMã§ã¯ããšãŒãžã§ã³ãã®çžäºäœçšãè¡šãã«ã¯ãããè¡šèšãé©ããŠããŸãïŒAgent1.dosomethingïŒAgent2ïŒãšdosomethingïŒAgent1ãAgent2ïŒã
ããã¯æãããªãŠãŒã¹ã±ãŒã¹ã§ã¯ãããŸããããABMã«ã€ããŠèããã³ãŒãã£ã³ã°ããããã«ããã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒãä¿æããŠãããšäŸ¿å©ã§ãã
ãŸãããã®æ§æãJuliaã§å©çšã§ããããã«ããããšæããŸãã ãªã®ã§
ãã¶ã€ã³ããã®æ©èœæåã®ã¢ãããŒãã«æè¬ããŸã
ããŒã¹ãã¯ãã£ããã¡ãœããåŒã³åºãæ§æã¯éåžžã«äŸ¿å©ã§ãããã€ãã®å Žæã§èªã¿ããããªã£ãŠããŸã
ãã¡ã€ã³ã AbïŒCïŒãbïŒAãCïŒãšåçã§ããã°çŽ æŽããããšæããŸãã
2015幎4æ22æ¥åå8æ50åããdatnamerã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
ããã§ãã£ã€ã ã鳎ããã«ã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ãè¡ãããç§åŠèšç®ã®1ã€ã®é åã§ãã
æ§æã¯å®éã«ã¯FPãããåªããŠããŸãããšãŒãžã§ã³ãããŒã¹ã®ã¢ããªã³ã°ã§ãã ç§ã¯
ãšãŒãžã§ã³ãéå±€ãèšå®ããããã®å ·äœçã§å€éç¶æ¿ãèŠéããŠãã
ãžã¥ãªã¢ã®è»œéã§é«éãªæœè±¡åãšã©ããããããã¿ã€ãã³ã°ã¯
é©ãã¹ã-ãã§ã«ããã€ãã®ABMãã¬ãŒã ã¯ãŒã¯ãç»å ŽããŠããŸããABMã§ã¯ããšãŒãžã§ã³ãã®çžäºäœçšãè¡šçŸããã«ã¯ãããè¡šèšãé©ããŠããŸãã
Agent1.dosomethingïŒAgent2ïŒãšdosomethingïŒAgent1ãAgent2ïŒãããã¯æãããªãŠãŒã¹ã±ãŒã¹ã§ã¯ãããŸãããããããç¶æãããšããã§ããã
ABMã«ã€ããŠèããŠã³ãŒãã£ã³ã°ããããã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒãâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/1974#issuecomment-95218555 ã
ABMã§ã¯ããšãŒãžã§ã³ãã®çžäºäœçšãè¡šãã«ã¯ãããè¡šèšãé©ããŠããŸãïŒAgent1.dosomethingïŒAgent2ïŒãšdosomethingïŒAgent1ãAgent2ïŒã
ãªããããè¯ãã®ã§ããïŒ ç·šéïŒç§ã¯ãã®ABMã³ã³ããã¹ãã§å ·äœçã«æå³ããŸãã
ã¹ãã«ããããå®ææŠäºã«å·»ã蟌ãŸããªãããã«ããŠãã ããã @ dbeach24 ã a.b(c)
ãJuliaã§b(a,c)
ãšåçã§ãããšææ¡ããŠãã人ã¯èª°ãããŸããã ããã¯èµ·ãããŸããã
ãªãŒããŒããŒãå¯èœãªãããã¯ãä»ã®èšèªãšã®èªç¶ãªçžäºéçšã«ãšã£ãŠéåžžã«éèŠã§ãã ããã¯ååãªçç±ã§ãã
Subject.VerbïŒDirectObjectïŒ
ããã€ãã®ç¶æ³ã§ããªãèªç¶ã§ãã å€ãã®OOããã°ã©ããŒã¯
ããããããŠããã¯é¢æ°ïŒAãBïŒã®åãªã䞊ã¹æ¿ãã§ããããã®äžŠã¹æ¿ãã¯
èªã¿ãããã®ããã«ããããã®ããšãããŸããIMOã
2015幎4æ22æ¥åå10æ32åããAndyHaydenã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
ABMã§ã¯ããšãŒãžã§ã³ãã®çžäºäœçšãè¡šçŸããã«ã¯ãããè¡šèšãé©ããŠããŸãã
Agent1.dosomethingïŒAgent2ïŒãšdosomethingïŒAgent1ãAgent2ïŒããªããããè¯ãã®ã§ããïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/1974#issuecomment-95256390 ã
ç§ã¯ãããææ¡ããŠããŸããã ïŒç³ãèš³ãããŸããããç§ã¯æŠäºãå§ããã€ããã¯ãããŸããã§ããããç¥ããŸããã§ãã
ææ¡ã¯äººæ°ããªãã§ããããïŒç§ã¯ãããåã«åºãŠããã®ãèŠããšæããŸãã
ãã©ãŒã©ã ã§ããããããããã§ã«åŽäžãããŠããããšã«æ°ã¥ããŠããŸããã§ãã
æªãã¢ã€ãã¢ã çç±ãèããŠãããããã§ããïŒ ïŒã¹ã¬ãããæããŠããããŸããïŒïŒ
ããããšãã
2015幎4æ22æ¥åå11:09ããã¹ãã£ãŒãã³G.ãžã§ã³ãœã³ã [email protected]
æžããŸããïŒ
ã¹ãã«ããããå®ææŠäºã«å·»ã蟌ãŸããªãããã«ããŠãã ããã @ dbeach24
https://github.com/dbeach24ãabïŒc ïŒã
Juliaã§ã¯bïŒaãcïŒ;ãšåçã§ãã ããã¯èµ·ãããŸããããªãŒããŒããŒãå¯èœãªãããã¯ãä»ã®èšèªãšã®ã¹ã ãŒãºãªçžäºéçšã«äžå¯æ¬ ã§ãã
ããã¯ååãªçç±ã§ããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/1974#issuecomment-95266671 ã
ãããè¡ãã«ã¯ãªã1ã€ã®çç±ã¯ãããa.b
èŠäžãb
ã®ç¯å²ã§a
ãªããã b
ã«ãã¯ã¹ãŸã§äžäººã§b
ã§å²ãã§ããã¹ã³ãŒãã ãããä»ãã¢ã¯ã»ã¹ãå·ŠåŽã®ãªããžã§ã¯ãã§æ€çŽ¢ãããªãå Žåããããšãéåžžã«æ··ä¹±ããŸãã
ãšããã§ãJuliaã®é¢æ°ã¯ãªããžã§ã¯ãå ã§ã¯ãªããçŸåšã®ã¹ã³ãŒãã§æ€çŽ¢ãããæ©èœãšèŠãªãããŸãã ãªããžã§ã¯ãã®å éšã§èª¿ã¹ãé¢æ°ã人ã ã䜿ãå§ããã®ã§ã¯ãªãããšããæããããããã®ãªãŒããŒããŒããæå¶ããŠããçç±ã®1ã€ã ãšæããŸãã
@toivoh ãããããªãŒããŒããŒãã®å®è£
ã¯æ¢åã®ã¡ãœãããã£ã¹ãããã䜿çšãããããã¹ã³ãŒãã®åäœã¯å€æŽãããŸããã @ dbeach24 ãç¡å·®å¥ãªa.b(c)
䜿çšã奚å±ããªãåºæ¬çãªçç±ã¯ãåãããšãè¡ãã«ã¯æ§æãå€ããããšãèšèªãšã©ã€ãã©ãªãæ··ä¹±ããããã§ãã b
ãa
ã«ãã£ãŠãææããããŠããªãããšãæããã§ããããã1ã€ã®ã¹ãã«ãéžæããŠãããç¶æããããšããå§ãããŸããJuliaã®å€éãã£ã¹ãããã¯b(a,c)
åªå
ããŸãâ b(a,c)
ã¡ãœããã¯ã_both_ a
ãšc
ã«ãã£ãŠçãã決å®ãããŸãã
ãã¡ãããæ倧ã®äŸå€ã¯ãPythonãC ++ãªã©ã®èšèªã§å€éšã©ã€ãã©ãªãåŒã³åºãå Žåã§ãããã®å ŽåãåŒã³åºãã©ã€ãã©ãªã®ãããæ§æããã©ãŒãªã³ã°ã§ãããšäŸ¿å©ã§ãã ïŒããšãã°ãããã¥ã¡ã³ããäŸãããŸãå€æŽããã«çŽæ¥Juliaã«ç¿»èš³ã§ããããã«ããŸããïŒ
ç§ã¯ã¿ããªæ¿¡ããŠããŸãããabïŒargïŒã¯ãaã®ãã£ãŒã«ãbã«æ ŒçŽãããŠããç¡åé¢æ°ãååŸããæå®ãããåŒæ°ã§ãããè©äŸ¡ããããšãæå³ããŸãããïŒ
ç§ã®iPhoneããéä¿¡ããã
2015幎4æ22æ¥ååŸ5æ6åãSteven G.Johnsonã®[email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
å€éš
@ScottPJonesçŸåšã¯åé¡ãªãåäœããŸãããäžè¬çã«ã¯è¯ãã¹ã¿ã€ã«ãšã¯èŠãªãããŸããã
ç§ã¯ã¹ã¿ã€ã«ã«ã€ããŠã¯æ°ã«ããŸããã§ãããããã¯ãã§ã«æå³ãæã£ãŠããã®ã§ãããã¯Juliaã®åäœæ¹æ³ïŒã€ãŸããå¿åé¢æ°ããã£ãŒã«ãã«æ ŒçŽã§ããããšïŒãšäžèŽããŠããã®ã§ãããã¯è¯ãè°è«ã§ã¯ãªããšæããŸããã abïŒargïŒãbïŒaãargïŒã§ãããã®ããã«æ±ã£ãŠã¿ãŠãã ããã
ç§ã¯ãå¿åé¢æ°ãæ ŒçŽããã¡ã³ããŒãæã€æ§é äœïŒåïŒãæã€ããã«äœ¿çšããå¯èœæ§ããããŸããããã§ã¯ãããŒã¿ããŒã¹ããJuliaã§èšè¿°ãããé¢æ°ãããŒããããããã解æããŠãé¢æ°ããªããžã§ã¯ãã«æ ŒçŽããŸãã
ãã®ãããªããšãããããã®ããè¯ãããžã¥ãªã¢ã³ãã¹ã¿ã€ã«ã¯äœã§ããããïŒ
ããããšãïŒ
@ScottPJonesãããã¯åçã§ãã£ãŠã¯ãªããªããšããåæããããšæããŸã*ã
ãã¹ã¿ã€ã«ãã«ãŒã«ã«ã¯äŸå€ãããå ŽåããããŸããããããã®ãªãŒããŒããŒãã®å Žåãšåæ§ã«ããã£ãŒã«ãã«puté¢æ°ã䜿çšããã«ã¯èª¬åŸåã®ããã±ãŒã¹ãå¿ èŠã§ãã åé¡ã¯ã人ã ããããã®æå°æªãªããšãããã¹ãã§ã¯ãªããšããããšã ãšæããŸã/ããã®ããã«/圌ããã§ããããã§ãã
ããã¯äžäŸãããããŸããããããè¯ãæ¹æ³ããããããããŸããïŒç¢ºãã«ãããå¯äžã®æ¹æ³ã§ã¯ãããŸããïŒ...
99ïŒ ä»¥äžã®å ŽåãtypeofïŒaïŒã§ãã£ã¹ãããããããšããå§ãããŸãã é¢æ°ãã£ãŒã«ãããããã®ãªãŒããŒããŒãã¯ãããŸããã
* _ããããç§ã¯èª°ãããããçéžãã2çªç®ã«ãããè¡ãããã±ãŒãžãããããšãç¥ã£ãŠãããšæããŸã..._
Dã§ã¯ã a.b(arg)
ãçµ±äžé¢æ°åŒã³åºãæ§æããšããååããããéåžžã«äººæ°ããããŸãããäžè¬çãªé¢æ°ã§ããJuliaã®å€éãã£ã¹ãããæ¹æ³ãšã¯ããªãçžæ§ãæªããšæããŸãã åé¡ã®é¢æ°ãå¿åãŸãã¯å®å
šã«ããã¯ã¿ã€ãã³ã°ãããŠããå Žåãåé¡ã¯æ©èœãããšæããŸãããããã¯ããªãå¶éçãªIMOã§ãã ã¯ã©ã¹ããŒã¹ã®åŸæ¥ã®ãªããžã§ã¯ãæåèšèªã®ç¿æ
£ããªãéããé¢æ°ãã£ãŒã«ããè€ååå
ã«æ ŒçŽããçç±ã¯ããŸããªããšæããŸãã ãžã§ããªãã¯é¢æ°ãã©ããããããŒãããå Žåã¯ãã¢ãžã¥ãŒã«å
ã«æ ŒçŽããã®ãé©ããŠããŸãã
ããããç§ãã¡ã¯ä»ããå®è³ªçãªè³ªåãããããªãé ããšããã«ããŸãã ãŸããgetfieldã®ãªãŒããŒããŒããèš±å¯ããæ¹æ³ãã¢ãžã¥ãŒã«ã§ã®getfieldã®ãªãŒããŒããŒããèš±å¯ããªãæ¹æ³ãããã³ãtruegetfieldãã®ç¹å¥ãªæ§æã«ã€ããŠããŸãå¿é ããªãæ¹æ³ã«ä¿å®çã§ããããšã«è³æã§ãã
@stevengj ïŒã¯ãããããŠç§ãèšãããšããŠããããã«ãããã¯ããããã®ãªãŒããŒããŒãã§äœããããã«é¢ä¿ãªãã a.b(c)
ãb(a, c)
ãšçãããªãããšã決ããŠèµ·ãããªãåºæ¬çãªçç±ã®1ã€ã§ãã ã
ããã«è§ŠããŠããã¡ãŒãªã³ã°ãªã¹ãã§ããã€ãã®è°è«ããããŸããã ç§ã®èŠè§£ã§ã¯ããã®ã¹ã¬ããã«ïŒ@nalimilanã«ããïŒæãé¢é£æ§ã®ããæçš¿ã¯æ¬¡ã®ãšããã§ãïŒ https ïŒ//groups.google.com/d/msg/julia-users/yC-sw9ykZwM/-607E_FPtl0J
ãã®æ©èœããã€äœ¿çšãããã«ã€ããŠã®å人çãªããªã·ãŒã«é¢ãã@johnmyleswhiteã®ã³ã¡ã³ãã«è¿œå ãããšãããã§ããã€ãã®HTTPã®ã¢ã€ãã¢ã圹ç«ã€å¯èœæ§ãããã getfield()
å¯äœçšãsetfield!()
ããªãã¯ãã ãšæããŸããã¹ãçã§ããå¿
èŠããããŸãïŒã€ãŸããåãå€ã§è€æ°ååŒã³åºããšã1ååŒã³åºãã®ãšåãå¹æããããŸãïŒã ã³ã³ãã€ã©ã«ãã£ãŠåŒ·å¶ãããå¿
ãããå³æ Œãªã«ãŒã«ã§ã¯ãããŸããããç©äºãçããªãããã«ããããã®äœ¿çšã¬ã€ãã©ã€ã³ã
ãã€ã³ã¿ãŒãã©ã¡ãŒã¿ãŒã䜿çšããŠãã©ã¡ããªãã¯åã䜿çšãããã£ãŒã«ããèšå®ãããšãã«ã«ã¹ã¿ã ã»ãã¿ãŒãåŒã³åºãããã«å€æããåé¿çãæçš¿ããŸããã
æçš¿ïŒ https ïŒ//groups.google.com/forum/#ïŒtopic / julia -users / _I0VosEGa8o
ã³ãŒãïŒ https ïŒ
setfieldãŸã§ã®åé¿çãšããŠãããã±ãŒãžã§ãã®ã¢ãããŒãã䜿çšããå¿ èŠããããã©ããçåã«æã£ãŠããŸãã éè² è·ãå©çšå¯èœã§ããããããšããã©ã¡ããªãã¯åã·ã¹ãã ã«é床ã®ã¹ãã¬ã¹ãããã£ãŠããŸããïŒ
getfield
/ setfield!
ãªãŒããŒããŒãã®ãã1ã€ã®å©ç¹ã«ã€ããŠèšåããããšæããŸãããããé©åãªå Žæã§ããããšãé¡ã£ãŠããŸãããã以å€ã®å Žåã¯ãç³ãèš³ãããŸããã ïŒé¢é£ãããã¯ãhttps://groups.google.com/forum/#!topic/julia-users/ThQyCUgWb_Qã«æ²èŒãããŸããïŒ
getfield / setfieldã®ãžã¥ãªã¢ïŒ ãªãŒããŒããŒãã«ããã_å€éšããã±ãŒãž_ã§ã®èªåãªããŒãæ©èœã®é©ãã»ã©æŽç·Žãããå®è£ ãå¯èœã«ãªããŸãã ïŒãã®æ©èœãååŸããã«ã¯ãIPythonèªåãªããŒãæ¡åŒµæ©èœhttps://ipython.org/ipython-doc/3/config/extensions/autoreload.htmlã«è¿œå ããå¿ èŠã®ãããã¹ãŠã®ããŒãã¯ãŒã¯ãåç §ããŠãã ãããïŒèªåãªããŒãã®èãæ¹ã¯ã REPLã®æäœäžã«ãå€éšã¢ãžã¥ãŒã«ã®é¢æ°ãšã¿ã€ããå€æŽã§ããŸãã
TLDRïŒ getfield
/ setfield!
ãªãŒããŒããŒããèŸæžãããã³https://github.com/malmaud/Autoreload.jlã«é¡äŒŒããããã±ãŒãžã§ããŸãããã¯ãã§ãã
å ·äœçã«ã¯ãAutoreload.jlã«äŒŒã次ã®ãããªããã±ãŒãžãæ³åããŠã¿ãŠãã ããã
æåã«ã¢ãžã¥ãŒã«M.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)
次ã«ãM.jlãã«å€æŽããŸã
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
ããã©ãŒãã³ã¹ã¯Pythonã®å Žåãããæªããªãããšã¯ãªããããIPythonèªåãªããŒãããã¯ãŒã¯ãããŒã移è¡ãã人ã¯ããã©ãŒãã³ã¹ã®é¢ã§äœã倱ãããšã¯ãããŸããã ãããŠãREPLãåèµ·åãããšãå®å šãªããã©ãŒãã³ã¹ã«æ»ããŸãã
a[:field][:field2][:morestuff](b[:random_stuff])
ã¯ããŸãèªããªãã®ã§ãæžãã®ã«é£œããŸããã ã ããç§ã¯0.4ãš0.5ã®ãŠãŒã¹ã±ãŒã¹ã§æ©èœãããã®å°ããªãã¯ããæžããŸãã
https://github.com/sneusse/DotOverload.jl
TL; DR
åŒã®ASTãå€æãããã¯ãa.b
-> getMember(a, :b)
ãããè¯ãèãã§ãããšããã³ã³ã»ã³ãµã¹ããªãããããæ§æãã©ããããã«ã€ããŠççŸããææ¡ãããããã0.6ããåé€ããŸãã
@Keno ïŒççŸããææ¡ãžã®ãªã³ã¯ã¯ãããŸããïŒ
@StefanKarpinskiããŸã ãããæžããŠãããšã¯æããªãããããã«ãžã¥ã¬ããããããšæãã
object.fieldname
ã fieldname(object)
ãget_fieldname(object)
ãããªã²ãã¿ãŒé¢æ°ãããåªããŠããããšãããããŸããã object.fieldname
ïŒãŸãã¯object$fieldname
ïŒãgetpublicfield
ïŒããããããè¯ãååïŒãžã®åŒã³åºãã§ããã object..fieldname
ãå®éã®getfield
ïŒãã©ã€ããŒãïŒã¯è¯ããªãã·ã§ã³ãããããŸããã ãã®ããã«ãåã¯ã²ãã¿ãŒã®ä»£ããã«getpublicfield
ãå®çŸ©ããå¿
èŠãããã object.fieldname
ãå®è¡ããããšãããšããã£ãŒã«ãããã©ã€ããŒãã§ãããšãããšã©ãŒIDãè¿ãããŸãïŒã®å®çŸ©ããªãå Žåã¯ãã©ã€ããŒãã«ãªããŸã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
ã¯å®éã«ã¯getfield
ã§ã¯ãªãå°åœ±é¢æ°Field{:b}()
åŒã³åºãå¿
èŠãããããã x->x.a
ãããªé¢æ°getfield
ã¯åžžã«äœã¬ãã«ã®ãã£ãŒã«ãã¢ã¯ã»ã¹ãæå³ããŸãã
äžèšã®å®è£ ã¯å®å šã«æ©èœããŸãããã³ã³ãã€ã©ãŒã§ã¯ããªãå°é£ã§ãïŒsysimg + 5ïŒ ãããã¯æ¬åœã«å¬ããé©ãã§ãïŒã ãããã£ãŠãããã«ã¯ããã€ãã®ç¹æ®åãã¥ãŒãªã¹ãã£ãã¯ãå¿ èŠã§ãããããã€ãã®åæã®æé©åãæŽæ°ããå¿ èŠããããŸãããããŸãããã°ãããã¯å®è¡å¯èœã§ãã
ãã®å®è£ ã§ãã¹ãã«åæ Œã§ããããšã«é©ããŠããŸãã ãã®ã»ãã³ãã£ã¯ã¹ã«ãããcodegenãã¢ãžã¥ãŒã«åç §ãæé©åããããšãäžå¯èœã«ãªããŸãããïŒ ãŸããã°ããŒãã«å€æ°ïŒé床ãšã¡ã¢ãªïŒãã¯ããã«é«äŸ¡ã«ãªãããã§ãã ãããsysimgã«è¡šç€ºãããå¯èœæ§ã¯ããã»ã©é«ããªãããã§ãã æšè«ã®äœäžã¯ãããã§ã¯sysimgãå°ããããå¿ èŠãããããã«æãããŸããã5ïŒ æªåãããšãè¯ãã¹ã¿ãŒããšã¯æããŸããïŒ
ã¯ãã jl_resolve_globals
ã«ã¯ãããããGlobalRefsã«å€æããããã®ã³ãŒãããããæŽæ°ããå¿
èŠããããŸãã ãã以å€ã¯ãcodegenãããããåŠçã§ããããã«ãããããã€ã³ã©ã€ã³åããå¿
èŠããããŸãã æšè«ã§ã¯ãã¿ãã«getindex
å Žåãšåæ§ã®ç¹æ®ãªã±ãŒã¹ãå¿
èŠã«ãªãå¯èœæ§ããããŸãã
ã¿ãã«getindexã®å Žåãšåæ§ã®ç¹æ®ãªã±ãŒã¹ãå¿ èŠã«ãªãå¯èœæ§ããããŸã
ãã®ç¹æ®ãªã±ãŒã¹ã§ã¯ãçµã¿èŸŒã¿ã®getindex
ã¡ãœããã·ã°ããã£ãšäº€å·®ããã¡ãœãããå®çŸ©ãããªãããšãæåŸ
ããæ³å®ããŠããŸãã ããã§ã¯ããã®ã±ãŒã¹ãç¹ã«ã©ã®ããã«åœãŠã¯ãŸãã®ãããããŸããã
::Module
ã¡ãœãããè¿œå ãããããã·ã£ããŠã€ã³ã°ããããšã¯èš±å¯ãããŠããªããšèšããŸã---å®éã®ãšã©ãŒã§åŒ·å¶ãããå¯èœæ§ããããŸãã
@JeffBezansonãããã®3è¡ã®ãã©ã³ãã¯ãããŸããïŒ èªåã§ããŒã«ã«ãã«ãã«è¿œå ããããšããŸãããããžã¥ãªã¢ã¯ããåãå§ããããã§ãåäœãããããšãã§ããŸããã§ããã
julia 1.0ã®æ©èœã«å¯Ÿããåžæã1ã€ãããªãå Žåã¯ãããã§ååã§ãã ããã¯ã MimiãšQueryã®äž¡æ¹ã§ç§ãæ±ããŠãã2ã€ã®é·å¹Žã®åé¡ã解決ããŸãã
ã¯ãšãªã®å Žåã¯ããªãäžè¬çã ãšæããŸãã ããã䜿çšããŠããã¯ãã§æ°ããåãçæããå¿
èŠã®ãªãããŒãžã§ã³ã®NamedTuplesãèšè¿°ã§ãããšæããŸããããã«ãããçæãããé¢æ°ãèšè¿°ããŠã次ã®ãã£ãŒã«ãã®ã»ããã§NamedTuple
ãè¿ãããšãã§ããŸããçæãããé¢æ°ã§èšç®ãããŸãã ããã«ãããtype-stableããŒãžã§ã³ã®blackrock / NamedTuples.jlïŒ4ãäœæã§ããããã«ãªããšæããŸããããã¯ãçŸåšQuery.jlã§æ倧ã®é害ãšãªã£ãŠããŸãã
ç°¡åã«èšãã°ãããã¯ãžã¥ãªã¢ã®ããŒã¿åŠçã¹ããŒãªãŒå šäœã«ãšã£ãŠéåžžã«äŸ¡å€ããããŸãã
以äžã®æ§æã¯å©çšã§ããŸããïŒ
function (obj::MyType).plus(n::Int)
return obj.val + n
end
ãªãäžçã§ãã®æ§æãå¿ èŠãªã®ã§ããïŒ
æžãããobj.plus(n)
ã®ä»£ããã«obj + n
ããã€ãã®æ·±å»ãªOOã¹ããã¯ãã«ã çå矀ã§ãã
ããããŸãããäžããããäŸã¯äºçŽ°ãªãã®ïŒãããŠæªããã®ïŒã§ããã
getfield
ããªãŒããŒããŒããã代ããã«ãã®æ§æã䜿çšããŠãåŒæ°ã䜿çšã§ããããã«ããããã®ã¢ã€ãã¢ã«ãã
ç§ã¯äž»ã«æ©èœã«é¢å¿ããããŸãã getfield
ããªãŒããŒããŒãããããã®çç¥ãããæ§æãæã€ããšã¯ãããã»ã©éèŠã§ã¯ãªãããã«æãããè°è«ãã䟡å€ããããŸããã ããã«ã getfield
ãšsetfield!
getindex
ãšsetindex!
ãçŽæ¥ãã©ãŒãªã³ã°ããŠãããããJuliaã§ã¯ããèªç¶ã§ãã æåŸã«ããªããžã§ã¯ãæåã¹ã¿ã€ã«ãåºç¯ã«äœ¿çšããããšã¯ããžã¥ãªã¢ã®ã€ãã£ãªã ã«ã¯ããŸãé©ããŠããŸããããªããžã§ã¯ãæåã®ãããªã¡ãœããå®çŸ©æ§æã§ããã奚å±ããããšã¯æããŸããïŒãã ããåŒæ°ã«ã€ããŠã¯äžèšã®ã³ã¡ã³ããåç
§ããŠãã ããïŒã
ç§ãæãã€ããã®ã¯ã $
æŒç®åãéæšå¥šã«ãªã£ããšããããšã§ãã ããŠãããã¯æããã«$(x, sym::Symbol) = ...
ãããªããšããã§ã«å©çšå¯èœã«ããŸããã次ã®ãããªããåã£ãæ§æã®æžãçŽãã楜ããããšãã§ããŸãã
x$y => $(x, ::Type{Val{:y}})
x$z(args...) => $(x, ::Type{Val{:z}}, args...)
ããã¯ãæ¬æ Œçãªgetfieldã®ãªãŒããŒããŒããè¡ããã«ããã®åé¡ã§ãã§ã«èšåãããŠããã»ãšãã©ã®ã±ãŒã¹ãã«ããŒããŠãããšæããŸãã ççŽã«èšã£ãŠã .
æŒç®åã¯Juliaã§ããªãæå³çã«é£œåããŠããã®ã§ããã®ãããªãã®ã¯æ¶åãããããããã§ã圹ç«ã€ã®ã«åå䟿å©ã§ãã
@ quinnj ãïŒ
ãã ãããã£ãŒã«ãã¢ã¯ã»ã¹çšã«ãã§ã«.
ããããã£ãŒã«ãã¢ã¯ã»ã¹ã®ãããªæŒç®åã2ã€æã€ããšã¯ã1ã€ã¯ãªãŒããŒããŒãå¯èœã§ããã1ã€ã¯ããã§ã¯ãªãããã«èŠããŸãã ãŸããã»ãšãã©ã®å Žå.
䜿çšããPythonããã®ä»ã®ãªããžã§ã¯ãæåèšèªãžã®èšèªéåŒã³åºãã¯å°ãäžèªç¶ã§ãã
ä»ã®èšèªãšã®çžäºéçšæ§ã¯ããã®ãããªãã®ãå°å
¥ããããã®æå¹ãªè°è«ã§ã¯ãªããšæããŸãã ãPythonã³ãŒãã¯ãã®ããã«èŠããã®ã§ãPythonã®ãµããããããã«ãããããè¡ãå¿
èŠããããŸãããšèšã£ãŠãããããªãã®ã§ãã ãžã¥ãªã¢èªäœãããè¯ãããã³/ãŸãã¯ããäžè²«æ§ã®ãããã®ã«ããããã«ã€ããŠã®è°è«ã¯ãŸã èŠãŠããŸããã JuliaãOOPã¹ã¿ã€ã«ã®x.f()
æ§æãæäŸããªãããšã¯ãã§ã«ååã«ç¢ºç«ãããŠããŸãã ãã®ãããªããšãèš±å¯ããããšã¯ççŸãæ±ããŠããŸãã
@stevengj ãç§ãã©ãããæ¥ãã®ããšãããšã x.f
ãã£ãŒã«ãã¢ã¯ã»ã¹ã§ã¯ãªããšããäºå®ã§ãã å®éã®ãã£ãŒã«ãã¡ã³ããŒf
ã¯ãããŸããã ãã®å
šäœã®åé¡ã¯getfieldã®ãªãŒããŒããŒãã«é¢ãããã®ã§ãããäž»ãªæžå¿µã¯x.f
å®éã«ãã£ãŒã«ããåç
§ããŠããã®ãããããšãå
éšã§äœãä»ã®ããšãããŠããã®ããšããæœåšçãªæ··ä¹±ã ãšæããŸãã
ç§ãææ¡ããæ§æã®æžãçŽãã®å©ç¹ã¯ãgetfieldãšã®è¿œå ã®æ··ä¹±ãæãããšãªããèšèªã®çžäºéçšã¹ããŒãªãŒãå®çŸããããšã§ãã ããã¯ã .
ãé飜åã«ãªããšèšã£ããšãã«ç§ãèšåããŠããããšã§ãã x$f
æ¬åœã«ãã£ãšé¢åãªã®ã ãããïŒ ãªãããããããæŒç®åã䜿çšããå¿
èŠãããã®ãââããããŸããã
ãã®å šäœã®åé¡ã¯getfieldã®ãªãŒããŒããŒãã«é¢ãããã®ã§ãããäž»ãªæžå¿µã¯
x.f
å®éã«ãã£ãŒã«ããåç §ããŠããããå éšã§äœãä»ã®ããšãããŠããã®ããšããæœåšçãªæ··ä¹±ã ãšæããŸãã
@JeffBezansonã®3è¡ã®ææ¡ã«æ··ä¹±ãa.b
ã¯åžžã«å°åœ±é¢æ°åŒã³åºãã«äžãããã getfield
åŒã³åºãã«ã¯ãªããŸããã ãããŠã getfield
ãåŒã³åºãå°åœ±é¢æ°ã®ããŒã¹ã«ããã©ã«ã/ãã©ãŒã«ããã¯ã¡ãœããããããŸãã ãŠãŒã¶ãŒã¯ãå¿
èŠã«å¿ããŠãç¬èªã®ã¿ã€ãã®ã¡ãœããããã®å°åœ±é¢æ°ã«è¿œå ã§ããŸãã getfield
åžžã«ãã®ææ¡ã®äœã¬ãã«ã®ãã£ãŒã«ãã¢ã¯ã»ã¹ãæå³ãããŠãŒã¶ãŒã¯getfield
ã¡ãœãããè¿œå ããŸããïŒããããgetfieldã®ãªãŒããŒããŒããã®æå³ã ãšæããŸãïŒã ããã¯ç§ã«ã¯ãšãŠããããã«æããŸãã ããã¯èšã£ãŠãããã®ææ¡ããŸã ããŒãã«ã«ãããã©ããã¯ç§ã«ã¯ããããŸããããç§ãç解ããŠããªãã³ã³ãã€ã©ã®æžå¿µãããããã§ã:)
ç§ã¯ãã®æ©èœãæ¬åœã«æ¬²ããã§ãïŒç§ã¯ãã€ãScalaã§ãããæããŠããŸããïŒã Juliaã§ã¯ããã£ãŒã«ãã«çŽæ¥ã¢ã¯ã»ã¹ããIMHOãéåžžã«èªç¶ã«ãªããŸãïŒããšãã°ããã¹ãŠã®ã²ãã¿ãŒãšã»ãã¿ãŒãé²åŸ¡çã«å®çŸ©ããJavaã®æ¹æ³ãšæ¯èŒããŠïŒã ãããããä»®æ³ããã£ãŒã«ããè¿œå ããæ©èœããªããšãå€ãã®ã³ãŒããå£ããã«æ§é ãé²å/ãªãã¡ã¯ã¿ãªã³ã°ããããšã¯éåžžã«å°é£ã«ãªããŸãã
ããã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 ïŒ
@bramtaylã¯ãç§ãå
¥ããŠãããšæããŸã@overload_dots
åã«ã a.b
è¡šçŸãããšãããã§ã®ãã€ã³ããç ŽããŸãã
ãã¯ããããŒã¹ã«è¿œå ããããšãææ¡ããŠããŸããã§ããã ãã¯ãã§äœ¿çšãããæŠç¥ãããŒãµãŒã«çµã¿èŸŒãããšãææ¡ããŠããŸããã ãã ããããã¯ãã¡ã€ã«å šäœã§å®è¡ããããIDEã«ãããã³ã°ãããã§ãããã¯ãã§ãã
ããã¯å¿
ç¶çã«äŒŽãa.b
ã«è§£æãããExpr(:., :a, :(Val{:b}())
ãšãŸã§äžãget_field_overloadable(a, Val{:b}())
@bramtayl ãäžèšã®Jeffã®
getfieldã®ãªãŒããŒããŒãã«é¢ããåé¡ã®1ã€ã¯ãäžéšã®ã©ã€ãã©ãªãããŒã¿æ§é ã®å éšãžã®é©åãªã€ã³ã¿ãŒãã§ã€ã¹ãåããŠããªãããšã§ãã æ§é å ã®ããŒã¿ãã€ã³ããå€æŽããŠãã³ãŒããå®è¡ããææ¥ã®ã¬ããŒããäœæã§ããããã«ããã ãã®å ŽåãäŸåé¢ä¿ã®3ã¬ãã«æ·±ãã©ã€ãã©ãªã§ã³ãŒããç·šéããŠã次ã®ããšãã§ããããã«ããããšã¯ç¹ã«æ¥œãã¿ã§ã¯ãããŸãããåççãã€è¿ éãªæ¹æ³ã§ããŒã¿ãã€ã³ãã«çŽæ¥ã¢ã¯ã»ã¹ããã 䜿çšããŠããããŒã¿æ§é ãèªåã§å¶åŸ¡ã§ããããã«ããããšæããŸãã
2ã€ç®ã®ãã€ã³ãã¯ãgetfieldãšsetfieldã䜿çšããŠãããšãã«ã巚倧ãªé¢æ°ã¡ã«ããºã ã§ã¯ãªããããŒã¿æ§é ã«çŽæ¥ã¢ã¯ã»ã¹ããŠããããšãåççã«æåŸ
ããããšããããšã§ãã ããã«ãããŒã¯ãŒãstruct
ã¯ã¿ã€ããå®çŸ©ããããã«äœ¿çšãããCãæãåºãããŸããããã«ãããgetfieldã¢ã¯ã»ã¹ãçŽæ¥ã§ããããšãæåŸ
ã§ããããã«ãªããŸãã
ãããã£ãŠã代ããã«$
æŒç®åã䜿çšããããšã¯ãgetfieldã®ããã«çŽæ¥ã¢ã¯ã»ã¹ããããšã¯æåŸ
ã§ããªãããã劥åœãªåŠ¥åæ¡ã ãšæããŸããä»ã®ã³ã³ããã¹ãã§ã¯ãã§ã«ç¹æ®æåã§ãããããããã»ã©é©ãããšã§ã¯ãããŸããããã®ããã«äœ¿çšãããšã䜿çšãã人ãå°ãªããé¢æ°ã§ã¯ãªããªããããéæšå¥šã«ãªãããããRã§ãåæ§ã«äœ¿çšãããŸãã
getfieldã®ãªãŒããŒããŒãã«é¢ããåé¡ã®1ã€ã¯ãäžéšã®ã©ã€ãã©ãªãããŒã¿æ§é ã®å éšãžã®é©åãªã€ã³ã¿ãŒãã§ã€ã¹ãåããŠããªãããšã§ãã
äžèšã®@JeffBezansonã®å®è£
ã¯ã getfield
ïŒãŸãã¯setfield
ïŒããªãŒããŒããŒãããŸããã
ãŸããããã1.0ã«ããããšããé¡ãããããšæããŸãã ã³ãŒããããçšåºŠæè»ã«ä¿ã€ããã«ã²ãã¿ãŒ/èšå®ãæžãããšïŒãããŠãããã«ååãä»ããæ¹æ³ãèããŠããããšïŒãšãã³ãŒãã®ãŠãŒã¶ãŒãçŽæ¥ãã£ãŒã«ãã¢ã¯ã»ã¹ã䜿çšããããšããèš±å¯/奚å±ãããããšã®éã§ãç§ã¯ãã°ãã°åŒãè£ãããŸãã
ããããã®ã²ãã¿ãŒãšã»ãã¿ãŒãåãã£ãŠé²åŸ¡çã«æžãããšã¯ãç§ã«ã¯ããŸããžã¥ãªã¢ã³ã®ããã«ã¯æããŸãã-çµå±ã®ãšããããžã¥ãªã¢ã«ã¯ãã©ã€ããŒã/ä¿è·ããããã£ãŒã«ãããªãã®ã§ããŠãŒã¶ãŒããã£ãŒã«ãã«çŽæ¥ã¢ã¯ã»ã¹ããããšããå§ãããŸãã 次ã«ãä»ã®ããã±ãŒãžãšã®å€ãã®ç«¶åã®ãªã¹ã¯ãåããã«ãå€ãã®ã²ãã¿ãŒ/ã»ãã¿ãŒé¢æ°ã«ååãä»ããæ¹æ³ã«ã€ããŠã®è³ªåããããŸãã ãŸãã getfield
ãšsetfield!
ïŒãŸãã¯åæ§ã®ãã®ïŒã®ã¡ãœãããè¿œå ããŠVal{:fieldname}
çšåºŠã§ãã£ã¹ããããããšããæ¹æ³ããããŸããŠãŒã¶ãŒãã¬ã³ããªãŒã§ã¯ãªãããã§ãã
äžæ¹ãçŽæ¥ãã£ãŒã«ãã¢ã¯ã»ã¹ãåºæ¬çã«ãã¹ãŠã®æ§é äœãæ°žä¹ ã«ããã¯ããå Žåãç¹ã«é·æéæå¹ãªã³ãŒãã®å Žåã¯ãæããã«æšå¥šãããã¹ãã§ã¯ãããŸããã @JeffBezansonã®å®è£ ã¯ããã®ãžã¬ã³ãããæãåºãããã®
ããã§ãã@ davidanthoffã getfield
ãªãŒããŒããŒããš.
ãã£ãŒã«ãã¢ã¯ã»ã¹æ§æã®ãªãŒããŒããŒããæ··åããŠããã«éããããŸããã ãã£ãŒã«ãã¢ã¯ã»ã¹æ§æã®ãªãŒããŒããŒããæå³ããŸããã
ãã®æ©èœãè¿œå ããã«ã¯äžäœäºææ§ã®ããæ¹æ³ãããããã1.xãªãªãŒã¹ã§è¿œå ã§ããŸããã1.0ã§ã¯è¿œå ãããŸããã ããšãããããã£ããšããŠããå®æããèšèšããããå®è£ ããæéã¯ãããŸããã
ïŒC-ïŒæ§é äœãžã®ãã€ã³ã¿ã«ãããæ§æã䜿çšãããšéåžžã«äŸ¿å©ã§ãã
ç§ã®å¥œã¿ã®æ§æã¯ããã€ã³ã¿ãŒã®ç§»åãšå€æã«ã®ã¿ãããã䜿çšããderefã«[]ã䜿çšããããšã§ãã
ãããã£ãŠãstruct somepair a :: Int b :: Int endãããã³p :: Ptr {somepair}ã®å Žåãpaã¯ãã£ãŒã«ããžã®ãã€ã³ã¿ãŒã§ãããpa [] = 3ã§æžã蟌ãããx =ã§èªã¿åããŸãã pa []ã
次ã«ãåã®åæ¹å®£èšãšãå Žåã«ãã£ãŠã¯CããããŒãã€ã³ããŒãããæ¹æ³ãå¿ èŠã§ããããããã°ãCãç°¡åã«ã©ããã§ããŸãã
远䌞ãæ確ã«ããããã«ã次ã®ãããªãã®ïŒ
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))
ããŒãã¹ãã€ã³ãã«ã€ããŠã¯ãjuliaã®ã©ã³ã¿ã€ã ã©ã€ãã©ãªããã®åããšã¯ã¹ããŒãã§ããpointer_from_objrefã¯å®éã«ã¯ããã䟿å©ãªã€ã³ããã¹ãã¯ã·ã§ã³ã®ããã«é©åã«åæå®ããããã€ã³ã¿ãŒãæäŸã§ããŸãã
åããªãã»ãããæã€2ã€ã®ãã£ãŒã«ããããã ãã§ããŠããªã³ã¯èªåçã«æ©èœããã¯ãã ãšæããŸããïŒ
@chethega https://github.com/JuliaLang/julia/pull/21912ãæ¢ããŠãããšæããŸããããã¯ãCã®ã¡ã¢ãªã¢ãã«ã®æ¡çšãåãå·»ãåé¡ïŒåã®ãã³ãã³ã°éåãã¢ãŠããªãïŒãªãã§ãã»ãŒåãæ©èœãæäŸããŸãã -ã¢ã¯ã»ã¹ã®å¶éãå éšãã€ã³ã¿ãŒã®ãšã€ãªã¢ã¹ãªã©ããã®èšèªã§å¯èœãªããã©ãŒãã³ã¹ã®æé©åãå¶éããŸãïŒã
å®æ°äŒæã¯ãããããå®è¡å¯èœã«ããŸããïŒ
plsã¯ãã€ã«ã¹ããŒã³ã1.0ã«å€æŽããŸãïŒ :)
@ Liso77ã©ãããæå³ã§ããïŒ ã¯ããŒãºæã®ã¹ããŒã¿ã¹ã«èšèŒãããŠããããã«ãããã¯ãã§ã«gitmasterã«å®è£ ãããŠããŸãã
@nalimilanééã£ãŠç解ãããããããªããïŒ ãããã1.xã«ã¯å»¶æãããã©ãã«ãä»ããããŠããããã 1.0ä»è§£æ±ºãããŠ
ãªãŒãã³ãœãŒã¹ã¯åæ£åã³ãã¥ããã£ã§ãã ãã€ã«ã¹ããŒã³ã¯ã1.0ãŸã§ã«å®äºããå¿ èŠããããã®ãèšå®ããŸãããè²¢ç®è ã¯åœŒããæããã®ã«åãçµã¿ãŸãã ãã®å Žåã誰ãã1.0ã§ãããæãã§ããã®ã§ãããã«å°éããããã®ã³ãŒããæäŸããŸããã
@ Liso77ç§ãç解ããŠããããã«ãããã¯v1.0ã«ã¯ãããŸããã Julia v1.0ã®æ©èœåçµæ¥ã¯12æ15æ¥ã«èšå®ãããŠããŸãããããã®åé¡ã¯12æ17æ¥ã«ã¯ããŒãºãããããã1.xãªãªãŒã¹ã§æåŸ ã§ãããšæããŸãã ç§ã®è§£éãæ£ãããªãå Žåãã³ã¢éçºè ã¯ç§ãä¿®æ£ããããšãã§ããŸãã
ãããããã¹ã¿ãŒã«ããŒãžããã次ã®ãªãªãŒã¹ã«å«ãŸããäºå®ã§ãã
ïŒïŒ äžæïŒ 1.0ã§åºãŠãããã®ã«1.0ã®ã©ãã«ãä»ããã®ã¯è¯ãããšã ãšæã£ãã ãã§ãã ãããæãŸããªããªããéªéããŠãã¿ãŸããïŒ :)
NEWSãã¡ã€ã«ã¯ã1.0ã«äœãå ¥ã£ãŠãããã確èªããããã®ããè¯ãæ¹æ³ã ãšæããŸãã
ãã€ã«ã¹ããŒã³ã¯ã1.xãªãªãŒã¹ã·ãªãŒãºã®äºææ§ãæãªãããšãªãå®è£ ã§ããããšããæå³ã§è¿œå ãããŸããããã³ãŒãã®æºåãã§ããããã1.0æ©èœãããªãŒãºããåã«ãšã«ããããŒãžãããŸããã ããããããããããã«ãã€ã«ã¹ããŒã³ãåé€ããŸãããããã®æç¹ã§ããã¹ã¿ãŒã«ããŒãžããããã®ã¯ãã¹ãŠ1.0ã«ãªããŸãã
説æããŠãããŠããããšãïŒ ããã¯ãšããµã€ãã£ã³ã°ã§ãïŒ NEWSãã¡ã€ã«ãç¹ã«åçºçã§ããã
åé€ããŠããã ãããããšãããããŸãã 1.0ã§ç»å Žããã®ãå¬ããã§ãïŒ :)
ãªãŒãã³ã³ããªãŒãã§ãããã®æ°ãããåçã«å®çŸ©ããããã£ãŒã«ããããµããŒãããæ¹æ³ãããã®ã ããããããšãã°ã fieldnames
ããªãŒããŒããŒãã§ããããã«ãããªã©ã§ãã ããã¯ãã€ã³ã¿ã©ã¯ãã£ãã«äœ¿çšããå Žåãªã©ãéåžžã«åŒ·åãªå ŽåããããŸããããšãã°ãå€ãã®åãé·ãååãæã€DataFrame
ãåŠçããå ŽåïŒå°æ¥çã«df.column_name
ããµããŒããããšæ³å®ïŒã
çŸæç¹ã§ã¯ãREPLïŒtab-expansionïŒãIJuliaãªã©ãã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªãåå®çŸ©ã調ã¹ãŠãããšæããŸããïŒ ããããã€ã³ã¿ã©ã¯ãã£ãã«äœ¿çšããããã«ãå€æŽãããå¯èœæ§ããããŸãã ãã ããã³ãŒãã£ã³ã°äžã«ã€ã³ã¹ã¿ã³ã¹ã䜿çšã§ããªããããJunoã®ãããªIDEã§ãµããŒãããããšã¯ããããäžå¯èœã§ãã
@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 right-ããããçŸåšãããããããšã¯ãå®å
šãã§ããïŒ ä»ã«äœãfieldnames
äŸåããŠããã®ãããããŸããã
å®å
šã§ãªãå Žåã¯ã complete_fieldnames(x) = fieldnames(x)
ãå®çŸ©ããREPLè£å®ã«complete_fieldnames
ã䜿çšããã«ã¹ã¿ã è£å®ã«ããããªãŒããŒããŒãããããšãå¯èœã§ããã¯ãã§ãã
ã¯ãããããç§ããããæèµ·ããçç±ã§ã-REPLãå人ãåŸã§ãããå©çšã§ããããã«ãBaseã§äœããå€æŽ/è¿œå ããå¿ èŠãããå Žåã«åããŠã 0.7æ©èœã®ããªãŒãºãèæ ®ããŠ...
ããããé¢æ°getproperty
ãåŒã³åºããŠããã£ãçç±ã§ãã fieldnames
ãšåããã®ãåç
§ããŠããªãããšãæ確ã«ããã®ã«åœ¹ç«ã¡ãŸãã fieldnames
å¹²æžãããšãééããªãæ·±å»ãªåé¡ãçºçããå¯èœæ§ããããŸãã
æå¹ãªããããã£å€ãæå®ããã«ã¯ã察å¿ããpropertynames
ãå¿
èŠã«ãªãå ŽåããããŸãã ãã¡ãããããã¯æ確ã«å®çŸ©ãããæŠå¿µã§ã¯ãªããããããªãã®ã§ãããããç§ãã¡ã¯å®æã«ãã£ãšå
·äœçãªäœãã欲ããã®ã§ãã
ããã«ã¯ãããå°ãæ·±ãåæãšå°é家ããã®å ¥åãå¿ èŠã«ãªããããããªããšæããŸããïŒããããšãïŒïŒ-ããã«ã€ããŠæ°ããåé¡ãéãå¿ èŠããããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
ããã®æ¥œãã3è¡ã®å®è£ ã¯æ¬¡ã®ãšããã§ãã
ç§ã®èãã§ã¯ã
a.b
ã¯å®éã«ã¯getfield
ã§ã¯ãªãå°åœ±é¢æ°Field{:b}()
åŒã³åºãå¿ èŠããããããx->x.a
ãããªé¢æ°getfield
ã¯åžžã«äœã¬ãã«ã®ãã£ãŒã«ãã¢ã¯ã»ã¹ãæå³ããŸããäžèšã®å®è£ ã¯å®å šã«æ©èœããŸãããã³ã³ãã€ã©ãŒã§ã¯ããªãå°é£ã§ãïŒsysimg + 5ïŒ ãããã¯æ¬åœã«å¬ããé©ãã§ãïŒã ãããã£ãŠãããã«ã¯ããã€ãã®ç¹æ®åãã¥ãŒãªã¹ãã£ãã¯ãå¿ èŠã§ãããããã€ãã®åæã®æé©åãæŽæ°ããå¿ èŠããããŸãããããŸãããã°ãããã¯å®è¡å¯èœã§ãã