์ฌ๊ธฐ์ ํ์ : https://github.com/JuliaLang/julia/issues/1263.
mutator / accessor ๋ฉ์๋์ ๊ตฌ๋ฌธ ์คํ์ผ๋ก ์ ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋ง์ ์ผ์ ์ข์ ๊ฒ์ ๋๋ค. API๋ฅผ ์์์ํค์ง ์๊ณ ๊ตฌ์กฐ ํ๋๋ฅผ ๋ ๋ณต์กํ ์ถ์ํ๋ก ์ ํ ํ ์ ์๋๋ก์ด๋ฅผ ์ ๊ณตํ๋ ์ธ์ด๋ก ํญ์ ๊ฐ์ฌํ์ต๋๋ค.
+1
๋๋ ์ด๊ฒ์ ๊ตฌํํ๋ ์ ๋์ ์ผ๋ก ๋ฉ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๊น? ๋๋์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์งํ์ ์ ์ ๋ ํ์์ ์ด์ง๋ง, Tom Short๊ฐ DataFrames์ ์ด๊ฒ์ ๊ฐ๋ ๊ฒ์ ์ ๋ง๋ก ๊ด์ฌ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
ํ์ฌ ๋ด๊ฐ ํ ์ ๋ฐ์์์ด ๋๋ฌธ์ ์ด๊ฒ์ (PyCall๋ฅผ ํตํด) ํ์ด์ฌ ์ฝ๋ ์๋นํ ์ข๋ค์๋ฅผ ํธ์ถ ํ ๊ฒ a[:b]
๋์ a.b
.
@JeffBezanson , 0.3์ ์ํด ์ด๊ฒ์ ๊ฐ์ง ๊ธฐํ๊ฐ ์์ต๋๊น? PyCall๊ณผ JavaCall (cc @aviks) ๋ชจ๋ ์ธ์ด ๊ฐ ์ํธ ์ด์ฉ์ฑ์ ์ ํฉํฉ๋๋ค.
@JeffBezanson if _not_, ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ตฌํ๋๊ธฐ๋ฅผ ์ํ๋์ง์ ๋ํ ๋ฐฉํฅ์ ์ ์ ํ ์์๋ ๊ธฐํ๊ฐ ์์ต๋๊น? ( I have an absolutely awesome way to implement this.
)
๋ด ๊ฒฝํ์ Jeff๊ฐ ์ข์ํ์ง ์๋ ๋ฒ์ ์ ๊ตฌํํ๋ ๊ฒ๋ณด๋ค Jeff๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ๊ตฌํํ๋๋กํ๋ ๋ ๋น ๋ฅด๊ณ ํ์คํ ๋ฐฉ๋ฒ์ ์์ต๋๋ค ;-)
๊ธฐ๋ณธ ์์ด๋์ด๋
getfield(x::MyType, ::Field{:name}) = ...
ํ๋ ๋น ์ค๋ฒ๋ก๋ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด "์ค์ "ํ๋์ ์ก์ธ์คํ์ฌ ํฌ๋ช
ํ๊ฒ ์์
ํ ์ ์์ต๋๋ค. ์ ์ ํ ๋์ฒด๋ก getfield(::MyType, ::Symbol)
๋ ์๋ํฉ๋๋ค.
๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ชจ๋์ด .
๊ณผ ๊ด๋ จํ์ฌ ํน๋ณํ ๋์์ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ด๊ฒ์ getfield
์ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ ์ผ ๋ฟ์ด์ง ๋ง ๋ฌธ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ญ ๋ณ์์ฒ๋ผ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ฐธ์กฐ _earlier_๋ฅผ ํด๊ฒฐํด์ผํ๋ค๋ ๊ฒ์
๋๋ค. .
์ ๋์์์ ์ด๊ฒ์ ํน๋ณํ ๊ฒฝ์ฐ๋ก ์ ์งํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. (# ์ ํ) * (# ํ๋) ์ถ๊ฐ ํจ์ ์ ์๋ฅผ ๋ถ์ํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ์ ์ปดํ์ผ๋ฌ ํจ์จ์ฑ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ํด ์ฐ๋ฆฌ๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ๋ณผ ๊ฒ์
๋๋ค.
@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
์ค๋ฒ๋ก๋ ์ ํ์ ๋ค๋ฅธ ๋ด๋ถ ์ฝ๋)์
๋๋ค ์ข์์ .
๋ชจ๋ ๊ธฐํธ (dataframes, ์๋ง ์ฌ์ )์ ๋ํ์ ์์ต๋๋ค Core.getfield
s๋ก ๋ถ ๋น๋๋ค.
๋๋ ์์์ฑ ์ธก๋ฉด์ ๋ํด ๊ฑฑ์ ํ์ง ์์ต๋๋ค.
ํ๋ ์ก์ธ์ค๋ฅผ ์ ํ ์ฌ์ฉํด์ผํ๋ ๊ฒ์
์ฃผ์ด์ง ์ ํ์ ๊ตฌํ. ํ๋ ์ก์ธ์ค๊ฐ API์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ
๋ชจ๋ API์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฌธ์ํํด์ผํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํธ๋ฆฌ ํ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค.
core.getfield์ ๋ํ ๋ช ๊ฐ์ง ๋จ์ถํค ๊ตฌ๋ฌธ์ ์์ฑํ ๋
๊ตฌํ.
์ด๋ฏธ # 4935์์ ์ง์ ๋์์ง๋ง ์ฌ๊ธฐ๋ก ๋น๊ฒจ ๋ณด๊ฒ ์ต๋๋ค. ์ ์ค๋ฒ๋ก๋ฉ์ ์ ๋๋ก ์ฌ์ฉ๋์ง ์์ผ๋ฉด ๊ธฐ์กด Julian ๋ค์ค ๋์คํจ์น์ ์ฝ๊ฐ ๊ฒน์น ์ ์์ต๋๋ค.
getfield (x :: MyType, :: Field {: size}) = .........
for i = 1 : y.size .....
๋์ ์
size (x :: MyType) = ..........
for i = 1 : size (y) ....
์ ์ ์ปฌ๋ ์ (Dataframes, Dicts, PyObjects)์ ํญ๋ชฉ์ ์ก์ธ์คํ๋ ๋ฐ ์ ์ฉํ์ง๋ง ํ๋๊ฐ ์๋ ๊ฐ์ฒด ์์ฑ์ ์ก์ธ์คํ๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
ํ ๊ฐ์ง ๊ณ ๋ คํ ์ฌํญ์ ์ ๊ทผํ๋ ํ๋์ ๊ณผ๋ถํ๋ฅผ ๊ฑธ ์ ์๋ค๋ฉด ํ๋์ _setting_ ๊ณผ๋ถํ๋ฅผ ๊ฑธ ์ ์์ด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ผ๊ด์ฑ์ด์๊ณ ์ค๋ง ์ค๋ฌ์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๊ฒ ๋ฉ๋ฆฌ ๊ฐ๋๋ฉ๋๊น?
@nalimilan , getfield
์ธ์ setfield!
๊ฐ ์ ๋์ ์ผ๋ก ํ์ํฉ๋๋ค. (์ ์ฌ setindex!
๋ getindex
๋ํ []
). ๋๋ ์ด๊ฒ์ด ๋
ผ์์ ์ฌ์ง๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@stevengj ๋์ : DataFrames๋ ํ์คํ ์ด์ ๋ํด setfield!
๋ฅผ ๊ตฌํํ ๊ฒ์
๋๋ค.
๋๋ ์ด๊ฒ์์ง์งํ๋ค.
๋ค๋ฅธ ์ธ์ด (์ : C # ๋ฐ Python)์ ๋ํ ๊ฒฝํ์ ๋ํธ ๊ตฌ๋ฌธ์ด ๋ง์ ์ค์ฉ์ ์ธ ๊ฐ์น๋ฅผ ๊ฐ์ง๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค. ํน์ํ ๋ฐฉ๋ฒ์ ํตํด ๊ตฌํ๋๋ ๋ฐฉ์์ ์ฃผ๋ก ์ฑ๋ฅ ํ๊ท ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ฉ์๋์ _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
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํธ๋์ด์ผํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๋ฌธ์ ๋ ์ฌ๋๋ค์ด _ ์ ๋ง _์ด ๊ตฌ๋ฌธ์ ์ข์ํ๋ค๋ ๊ฒ์
๋๋ค โ ๊ทธ๊ฒ์ ๋งค์ฐ ์ฆ๊ฒ์ต๋๋ค. ์ด๋ฌํ ๋ฉ์ง ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ๊ฐ์ฒด์ ๋ํ ๋ด๋ถ ์ก์ธ์ค์๋ง ์ฌ์ฉํด์ผํ๋ค๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ๋ ๊ฒ์ ์์ ํ ๋น๋ค์ด์ง ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. "ํ,์ด ๋ฉ์ง ๊ตฌ๋ฌธ์ด ์กด์ฌํฉ๋๋ค. ์ฌ์ฉํ์ง ๋ง์ธ์!" API๊ฐ ์ถ์
ํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋๋กํ๋ ๋์ ์ฌ์ ์ธ ๊ฒ์ ์ก์ธ์คํ๋ ๊ตฌ๋ฌธ์ ๋ ํธ๋ฆฌํ๊ณ ์์๊ฒ ๋ง๋๋ ๊ฒ์ด ํจ์ฌ ๋ ํฉ๋ฆฌ์ ์
๋๋ค. ์๋ง๋ ์ด๊ฒ์ ..
์ฐ์ฐ์ ์ธ private _real_ ํ๋ ์ก์ธ์ค ์ฐ์ฐ์์ ๋ํ ์ข์ ์ฌ์ฉ ์ฌ๋ก ์ผ ๊ฒ์
๋๋ค.
์ ๋ ์ฌ์ค์ด ๋ณํ๊ฐ ์ํฉ์ ๋ ๋ช
ํํ๊ณ ์ผ๊ด์ฑ์๊ฒ ๋ง๋ค ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ์๋ฅผ ๊ณ ๋ คํ์ธ์. ํ์ฌ step(r)
๋ r.step
์คํ์ผ์ ๋์ฐํ ์กฐํฉ์ด ์์ต๋๋ค. ํนํ ์ ๊ฐ FloatRange
๋์
ํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ step(r)
๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋ ๋ง ์ ํํ๊ธฐ ๋๋ฌธ์ ์ํํฉ๋๋ค. ํผํฉ์ ์ด์ ๋ ๋ฒ์์ ์ผ๋ถ ์์ฑ์ด ์ ์ฅ๋๊ณ ์ผ๋ถ๊ฐ ๊ณ์ฐ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋์ด ์ค์ ๋ก ๋ฒ์ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. step(r)
์์ฒด์ ์ ์๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ์ก์ธ์ค๊ฐ step(r)
์คํ์ผ์ด๋ฉด ๋ ๋์ ์คํ์ผ์ด ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ํ ๊ฐํ๋ฅธ ์ฌ๋ฆฌ์ ์ฅ๋ฒฝ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ r.step
๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก r..step
ํ๋ ๋ฉ์๋ ํธ์ถ๋ก ๋ง๋ค๋ฉด ์ฌ๋๋ค์ ์์ฐ์ค๋ฝ๊ฒํ๊ณ ์ถ์ ์ผ์ ํ ์ ์์ต๋๋ค.
์
๋ง์ ์นํธ์ (๋์ ํจ๊ป) ์ญํ ์ํ๋ ค๋ฉด r.length
๋๋ length(r)
์จ์ผํฉ๋๊น? ์ ๋ค๋ฆญ ํจ์์ ๋ฉ์๋ ์ฌ์ด์ ๋ถ์ผ์น๋ Python์ ๊ดด๋กญํ๋ ๋ฌธ์ ์ด๋ฉฐ Ruby๋ r.length
์คํ์ผ์ ์ ์ ์ผ๋ก ํ์ ํ์ต๋๋ค.
..
+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์ ์ ์ฌํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์๋ง๋ ์๋๊น์?)
์ด ๊ธฐ๋ฅ์ผ๋ก ๊ฐ๋ฅํฉ๋๋ค. ์ ๋ฅผ ๋ฉ์ถ ์์๋ ๊ฒ ์ค ํ๋์ ๋๋ค. ๋๋ ๊ทธ๋ฐ oo ์คํ์ผ ์ฝ๋์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค โ ์ ๊ฐ ๋งํ๋ฏ์ด ๊ฝค ์ฆ๊ฒ๊ณ ์ฌ๋๋ค์ด ์ ๋ง ์ข์ํฉ๋๋ค โํ์ง๋ง ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐํด์ผ ํ ์ผ์ ๋ํ ๊ฐ๋ ฅํ ์ ์ฑ ์ด _ ์ ๋ง๋ก ํ์ํ๋ค๋ ๊ฒ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ถฉ๋ถํ ์ ํ์ ์๊ฐํฉ๋๋ค. ํ ์์๋ ์ผ์ ๋งค์ฐ ์์ ๋ก์ธ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ค๋ฆฌ์๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ํ์ ๋ ์ ์๋ ๊ตฌ๋ฌธ์ OO ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ ์ ์ ์ ์ผ๋ก ๋์์ฃผ๋ ๋ฐ ๋ง์ ๋์์ด๋์์ต๋๋ค. ๊ทธ๋์ ๊ทธ ์ด์ ๋ง์ผ๋ก ์ ์ ์์ด ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ๊ฐ๋จํ ์ค๋ฒ๋ก๋ฉ (์ฆ, a.b
sans (args...)
)์ ๊ฒฝ์ฐ ์์ @nalimilan ์ ์๊ฒฌ์ ๋์ํฉ๋๋ค. ์ด์ # 4935์์ ํฉ์๋ ํ๋๊ฐ API์ ์ผ๋ถ๊ฐ ์๋๋ผ ๋ฉ์๋ ๋ง ์์ด์ผํ๋ค๋ ๊ฒ์
๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ทธ ๋ฌธ์ ๋ ์ข
๊ฒฐ ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. .
-overloading ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ ํ๋๊ฐ API์ ์ผ๋ถ๊ฐ ์๋์ด์ผํ๋ค๋ ๊ฒ์ ํจ์ฌ ๋ ๋ช
ํํ๊ฒ ํ ์ ์์ผ๋ฉฐ ํ๋๋ฅผ API์ ์ผ๋ถ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
ํ์ง๋ง ์, .
๊ตฌ๋ฌธ์ด ํธ๋ฆฌํฉ๋๋ค ...
์ด๋ป์ต๋๊น : ๋จ์ผ .
์ _only_ getfield(x::MyType, ::Field{:name}) = ...
๋ํ ๊ตฌ๋ฌธ ์ ์คํ์ด์ด์ผํ๋ฉฐ ํ๋ ์ก์ธ์ค๋ _only_์์ ..
(์ฆ, .
๊ฐ ์ง๊ธ ๋ฌด์์ธ์ง).
์ด๊ฒ์ ๋ช ํํ ๊ตฌ๋ณ์ ํ์ฉํฉ๋๋ค.
.
๋ ์ ํ ์ธ์คํด์ค์ ๊ฐ๊ณผ ์ ์ฌํ ๊ฒ์ ์ก์ธ์คํ๊ธฐ์ํ ๊ณต์ฉ 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)
๋ ์ถ๊ฐ ์ธ์๊ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค..
๊ธฐ๋ณธ๊ฐ์ ..
. Julia๋ ์์ฉ๊ตฌ ์ธ์ด๋ก ์๋ ค์ ธ ์์ง ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ์ ์งํ์
.
๊ธฐ๋ณธ๊ฐ์..
. Julia๋ ์์ฉ๊ตฌ ์ธ์ด๋ก ์๋ ค์ ธ ์์ง ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ์ ์งํ์
๋๋ ์ด๊ฒ์ ๋์ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ฌ์ง์ด ํฉ์ฑ ์์ฑ์ ์ค์ ํ๋ ๊ตฌ๋ฌธ์ ๊ฒ a.property = b
ํ์ง a.property() = b
.
๋ฌผ๋ก , ๊ตฌ๋ฌธ์ผ๋ก์ a.property()
๊ฐ IMHO๊ฐ ์ข์ง ์์ ์ด์ ๋ฅผ ๋ช
ํํํ๊ณ ์ถ์์ต๋๋ค.
๋๋ ๋ ๋ช ํํ๊ฒ : ์ ๊ตฌ๋ฌธ์ ๋ํ ์ค์ํ ์ ์ ํจ์๋ฅผ ์ ํ / ํด๋์ค์ ์ฐ๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ด ์๋๋ผ getter / setter๋ฅผ ์ข์ ๋ฐฉ์์ผ๋ก ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ getter / setter๋ ๋ฐ์ดํฐ ์บก์ํ์ ์ค์ํฉ๋๋ค (์ธํฐํ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์งํ์ง๋ง ๊ตฌํ์ ๋ณ๊ฒฝ)
์ด ๋ณ๊ฒฝ ์ฌํญ์ API ๋์์ด๋์ ๊ด์ ์์ ๋ณผ ๋ ํ๋ฅญ ํ ๊ฒ์ด์ง๋ง ๋ฏธ๋์ ๋ถ์ผ์น๋ฅผ ์ ํํ๊ธฐ ์ํด ์ผ์ข ์ ์คํ์ผ ๊ฐ์ด๋์ ํจ๊ป ์ ๊ณต๋์ด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
์ด๊ฒ์ dsl๊ณผ ๊ฐ์ Ruby๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค ...
amt = 1.dollar + 2.dollars + 3.dollars.20.cents
๊ทธ๋ฌ๋ ๊ด๊ธฐ์ฒ๋ผ ์๋ฐ์ ๋๋นํ์ญ์์ค.
object.propert1.property2.property3 ....
๋ช ๊ฐ์ง ์๊ฐ :
.
๊ตฌ๋ฌธ์ ๊ฐ์ฅ ์ํฉ๋๋ค. d.key
๋ค์ d[:key]
์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ๊ตญ ๊ทธ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค.a->property
๊ฐ a..property
๋ณด๋ค ๋ ์ ์ฝ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ๊ทธ๊ฒ์ ๊ทธ๋ ๊ฒ ํฐ ๋ฌธ์ ๊ฐ ์๋๋ฉฐ julia ๊ตฌ๋ฌธ์ผ๋ก ์๋ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.@BobPortmann ๋์ํ์ง ์์ต๋๋ค. ์ฌ์ ์ ์ปจํ ์ด๋ ๊ฐ์ฒด์ด๊ณ ์ปจํ ์ด๋ ๊ฐ์ฒด์ API๋ obj [index] ๋๋ obj [key]์ ๋๋ค. ์ง๊ธ์ Julia์ ์์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋ API๊ฐ ์ค๋ฒ๋ก๋๋์ด PyCall๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ OpenCL์์์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ์ค๋ฒ๋ก๋๋์ง ์์ผ๋ฏ๋ก ์ปจํ ์ด๋ API์ ๊ตฌ๋ณ์ ๊ฐํํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค.
๋น๊ณต๊ฐ ํ๋์ a->property
๋ฅผ ์ฌ์ฉํ๋ฉด C ํด์ปค๊ฐ Julia๋ก๋ถํฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ์๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์
๋๋ค ;-)
์ ๋ ..
๊ตฌ๋ฌธ์ ์ข์ํฉ๋๋ค.
a->property
๊ตฌ๋ฌธ์ ์ด๋ฏธ ์ฌ์ฉ๋์์ต๋๋ค. ์ด๊ฒ์ ์ต๋ช
ํจ์์
๋๋ค. ๊ทธ๋ฌ๋ a..b
์ฐ์ฐ์๋ ์ ์ ๋์ ์ฌ์ฉ๋์์ต๋๋ค. ๋์
๋๋ฆฌ์ ๋น์ทํ์ง๋ง ์ ํ ํ๋๊ฐ ๋ง์ ๊ฒ์ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. getter / setter ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด dict ์ธ๋ฑ์ฑ ๊ตฌ๋ฌธ๋ณด๋ค ๋ ์ข์ ๊ฒ์
๋๋ค.
"a-> property ๊ตฌ๋ฌธ์ ์ด๋ฏธ ์ฌ์ฉ๋์์ต๋๋ค. ์ด๊ฒ์ ์ต๋ช ์ ํจ์์ ๋๋ค."
์, ๋ฌผ๋ก ์
๋๋ค. ->
์ฃผ์์ ๊ณต๋ฐฑ์ด์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์์ต๋๋ค.
์คํ์ผ ๊ฐ์ด๋ ๋ผ์ธ์ผ๋ก property (x)๋ฅผ ์ฝ๊ธฐ ์ ์ฉ ์์ฑ์ ์ฌ์ฉํ๊ณ x.property๋ฅผ ์ฝ๊ธฐ / ์ฐ๊ธฐ ์์ฑ์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
์ฐ๊ธฐ ๊ฐ๋ฅํ ์์ฑ์ ๊ฒฝ์ฐ x.foo = bar๊ฐ set_foo! (x, bar)๋ณด๋ค ํจ์ฌ ์ข์ต๋๋ค.
์ฝ๊ธฐ์ foo(x)
, ์ฐ๊ธฐ์ x.foo
์ ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ์ค์ ๋ก ์ด๊ฒ์ ์์ฑ์ด ๊ทธ๋ ๊ฒ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์
๋๋ค. ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์ก์ธ์ค์ ๋ํด ๋์ผํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ์ฆ, ์ป์ ์์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๊ตฌ๋ฌธ (๊ฒํฐ ๋ฐ ์ธํฐ ์ฉ)
์คํ์ผ๊ณผ ๊ด๋ จํ์ฌ์ด ๊ธฐ๋ฅ์ด ๊ตฌํ๋๋ฉด x.length
๋ฐ length(x)
๋ ๋ค ๊ฐ๊ณ ์ถ์์ง ๋๋ ์ดํ ์์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๊ณ ์ ๊ฑฐํด์ผํ๋์ง ์ฌ๋ถ์ ๋ํ ํฐ ์ง๋ฌธ์ด ์์ต๋๋ค.
์ ์๊ฐ์๋ ์ฐ๋ฆฌ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ง ๊ฐ์ ธ์ผํ๊ณ ์์ผ๋ก 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)
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ํ์ง ์์์ต๋๋ค. ๋ด ์ ์์ _if_ ์์ฑ์ด ์ฝ๊ธฐ์ ์ฐ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ๋ค๋ฉด ์๋ง๋ x.foo
์ฝ๊ณ ์ฐ๊ธฐ๋ฅผ _both_ํ๊ณ ์ถ์ ๊ฒ์
๋๋ค.
@StefanKarpinski :ํ์ง๋ง length
์ ๊ฒฝ์ฐ๊ฐ ์๋๋๋ค. ํฌ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฅ๋๋ ๊ฒ์ด๊ณ length
๋ ํฌ๊ธฐ์ ์ ํ์
๋๋ค.
Jeffs๋ ์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ด๋ฌํ ๊ธฐ๋ฅ์ด ๋ ์ด์ ์ผ๋ฅ๊ฐ ์๋๋ผ๊ณ ์ง์ ํฉ๋๋ค.
@stevengj :
@tknopp โ ๊ธธ์ด๋ ํฌ๊ธฐ์์ ํ์๋์ง๋ง ํฌ๊ธฐ์ ๋์ผํ์ง๋ ์์ต๋๋ค. ํฌ๊ธฐ๋ฅผ ์๊ณ ์๋ค๋ฉด ๊ธธ์ด๋ฅผ ๊ณ์ฐํ ์ ์์ง๋ง ๊ทธ ๋ฐ๋๋ ์๋๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ์ฝ๊ฐ ํ๋ฆฟํ ์ ์
๋๋ค. ์ด๊ฒ์ด lufact
ํ์ฉ๋๋ ์ฃผ๋ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ณด๋ค ๋ ๋์ API๋ฅผ ์ฐพ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ ๋ค๋ฅธ ์ ๊ทผ๋ฒ์ ์ผ๋ฐ ํ๋ ฌ์ ์๋ถ ์ผ๊ฐ ๋ถ๋ถ๊ณผ ํ๋ถ ์ผ๊ฐ ๋ถ๋ถ์ ์ ๊ณตํ๋ upper
๋ฐ lower
์ผ๋ฐ ํจ์๋ฅผ ์ ์ํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋์ด ์ ๊ทผ ๋ฐฉ์์ ์๋ฅผ ๋ค์ด QR ๋ถํด๋ก ์ผ๋ฐํ๋์ง ์์ต๋๋ค.
_really_๊ฐ์ด ๊ตฌ๋ฌธ์ ์๊ตฌํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒฝ์ฐ๋ pycall, factorizations, ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ฐ์ดํฐ ํ๋ ์ ์ผ ์ ์์ต๋๋ค.
f(x)
๋ x.f
์ ๋ฌด์์ ๋ค์ฃฝ๋ฐ์ฃฝ์ผ๋ก ๋ ๋ ๊น ๊ฑฑ์ ๋ฉ๋๋ค. ์์คํ
์ ๋ฐฐ์ฐ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ค์ ์ง ๊ฒ์
๋๋ค.
@StefanKarpinski ๋ชฉ๋ก์ 1 ๋ฒ ์ง์ ์ด ์ ํ์ ํ๋๊ฐ ์๋์ผ๋ก ๊ณต์ฉ API์ ์ํจ์ ์๋ฏธํ์ง ์์ต๋๊น?
ํ์ฌ ๋ชจ๋์ ๊ณต์ฉ API๊ฐ ๋ฌด์์ธ์ง ์ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ด ๋ณด๋ธ ํจ์์ ์ ํ (ํ๋๋ ์๋). ์ด ๋ณ๊ฒฝ ํ์๋ ์ด๋ค ํ๋๊ฐ ๊ณต์ฉ API์ ์ํด์ผํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์์ต๋๋ค. ํ์ด์ฌ ์์์ฒ๋ผ ๊ฐ์ธ ํ๋์ ์ด๋ฆ์ a._foo
์ ๋๋ก ์์ํ ์ ์์ง๋ง ๊ทธ๋ ๊ฒ ์ข์ง๋ ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก DataFrames ์ฌ๋ก๋ ์ฝ๊ฐ ๋ถํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด DataFrames์ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ๊ฒ์ด์ง๋ง ๋ช ๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๊ฒ๋ณด๋ค ์ผ๊ด์ฑ ์์ค์ด ํจ์ฌ ๋ ๋ฌธ์ ๊ฐ๋ฉ๋๋ค.
๋๋ ๋ํ DataFrames, PyCall์ ์์กดํ๋ ๊ฒฐ์ ์ ๋ด๋ฆฌ์ง ์์ ๊ฒ์ ๋๋ค (๊ทธ๋ฆฌ๊ณ Gtk๋ ๊ทธ๊ฒ์ ์ํฉ๋๋ค). ํ๋๊ฐ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ์ผ๋ถ๊ฐ๋์ด์ผํ๋ค๊ณ ์๊ฐํ๊ฑฐ๋ ( "๋ฉ์ ธ ๋ณด์ด๊ธฐ ๋๋ฌธ์") ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
... ํ์ด ์ฝ ...
๋ฐ 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์ด "in"ํด๋์ค์์ ๋ฉ์๋ ์ ์๋ฅผ ์ํํ๋๋ก ํ์ฉํ๋ ๋์์ ์ฌ๋๋ค์ด OO ์ ํ ์ฝ๋๋ฅผ ๊ฐ๊ณ ์ํ๋ ๊ฒฝ์ฐ ์ผ๋ฐ ์คํ์ผ์ ํ์ฉํ์ง๋ง ๋งค์ฐ ํฌ๋ช
ํ์ง๋ง A.b()
๋ ์ฌ ์์ฑ์ผ๋ฟ์
๋๋ค. OO์์ ์ค๋ ์ฌ๋๋ค์๊ฒ๋ ์ด๊ฒ์ด ๋งค์ฐ ์์ฐ์ค๋ฌ์ด ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ํ getfield
์ ํจ๊ป A..b
๊ฐ์๋ ์๋ก์ด getfield
A..b
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ธฐ์์ ์ค๋ฒ๋ก๋ฉ์ ํ์ฉํ์ง๋ง ์ฌ๊ธฐ์์ ์ค๋ฒ๋ก๋ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํ์ง ์์ผ๋ฉฐ ํ๋ ์ ์ฌ / ์์ฑ์๋ง ์ฌ์ฉ๋ฉ๋๋ค (๋งค์ฐ ๋๋ฆฌ ์ฌ์ฉ๋์ง๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค. getfield(A, ::Field{:field})
์ค๋ฒ๋ก๋๊ฐ ์ฝ๊ฐ ๋ฌด์ญ๊ธฐ ๋๋ฌธ์
๋๋ค.
@ mauro3 :
@StefanKarpinski ๋ชฉ๋ก์ 1 ๋ฒ ์ง์ ์ด ์ ํ์ ํ๋๊ฐ ์๋์ผ๋ก ๊ณต์ฉ API์ ์ํจ์ ์๋ฏธํ์ง ์์ต๋๊น?
๊ทธ๊ฒ์ ํ์ํ ๋๊ฐ ์๋๋ผ foo.bar
ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด๋๋๋ ๋์ ๋ชฉ๋ก์ด์์ต๋๋ค. ๋น์ ์ ๋นํ์ฑํ ํ ์ ์์ต๋๋ค foo.bar
๋ง ํตํด ์ก์ธ์ค ํ ๊ฒ "๊ฐ์ธ"ํ๋์ ๋ํ ํ๊ธฐ foo..bar
.
@karbarcca : ๋๋ ๋น์ ์ด ์ฌ๊ธฐ์ ์ ์ํ๋ ๊ฒ์ ๋ํด ๋ช ํํ์ง ์์ต๋๋ค.
fwiw, ์ ๋ ๋์ํ๋ ์ฑ์ธ์ฉ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ .
์์ ํ ์ค๋ฒ๋ก๋ ํ ์์๊ฒ ๋ง๋๋ ํฌ์
๋๋ค. ๋๋ ์ด์ค ์ ์ ์์ด ๋ ํผ๋ ์ค๋ฝ๊ธฐ๋ณด๋ค๋ ๋ ๋ง์ ํผ๋์ผ๋ก ์ด์ด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
@ihnorton โ a..b
๋ฅผ ํ๋ ์ก์ธ์ค๋ฅผ์ํ (์ธ ์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ) ์ฝ์ด ๊ตฌ๋ฌธ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ a..b
๋ฅผ ์ค๋ฒ๋ก๋ ํ ์์๋ ๊ตฌ๋ฌธ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐ๋ํฉ๋๊น?
Julia์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ ๋จ์์ฑ์
๋๋ค. 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
๋๋ ์ด๊ฒ์ด getindex / setindex์ ๊ฐ์ด ์๋นํ ๋ช ํํ ๋ณํ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ข์ํ์ง๋ง, ์ํ ๊ฒฝ์ฐ, ํนํ OO ์ธ์ด ํจํค์ง์ ๊ฒฝ์ฐ ๋จ์ผ ๋์คํจ์น OO ์์คํ ์ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ค๋ฒ๋ก๋ ์ต์
๊ณผ ํจ๊ป ํ๋ ์ก์ธ์ค์ ..
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ ์ํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉํ๋ฉด PyCall / JavaCall์ด ..
๋ํ ํธ์ถ์ ์ค๋ฒ๋ก๋ํ์ฌ ํ๋ ์ก์ธ์ค๋ฅผ ์๋ฎฌ๋ ์ด์
ํ ์ ์์ผ๋ฉฐ, DataFrames๊ฐ ์ด ์ก์ธ์ค ๋ฑ์ ์ํด ..
๋ฅผ ์ค๋ฒ๋ก๋ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ํ ์๋ก์ด ๊ธฐ๋ณธ ํ๋ ์ก์ธ์ค์
๋๋ค. ๋ชจ๋ ์ ํ์ ๋ํด ์ผ๋ฐ์ ์
๋๋ค.
์์ํ ๊ตฌ๋ฌธ ์ฌ ์์ฑ์ ๋ํ ์ํํธ ์คํ์ด ์์ต๋๋ค. ์ง๊ธ ๋น์ฅ a.f(x)
ํ๊ณ ์๋ํ๋๋ก ํ ์ ์์ง๋ง ๋๋ถ๋ถ์ OO ์ธ์ด์๋ ํผ๋์ค๋ฝ๊ฒ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ๋ ๊ฒ์ ํ๋ฆผ์์ด ๋์ ์ผ์
๋๋ค.
๋ฌผ๋ก ๊ทธ ๋์ ์ ๋ค๋ฅธ๋ฉด์ ๋์ฐํ ์คํ์ผ ์กฐ๊ฐํ์ด๋ฉฐ, a.f
๋ a.f()
์ ๊ณตํต์ ์ด ์๊ธฐ ๋๋ฌธ์ ํ์์ด ๋น ๋ฅด๊ฒ ๋ฌด๋์ง๋๋ค.
Julia์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ ๋จ์์ฑ์ ๋๋ค.
x.y
์ค๋ฒ๋ก๋ฉ
์ฌ๊ธฐ๋ ๊ฐ์ ๋๋. ์ด๊ฒ์ด ์ค์ ๋ก ํ์ํ ๊ฒ์ด ์ ํ๋ ์์ interop ์ ํ์ ๋ํ ๊ฒ์ด๋ผ๋ฉด ์ ํ ์ ์ธ์์ ๋ช
์ ์ ์ผ๋ก ์์ฒญํ ๊ฒฝ์ฐ์๋ง ์ ํจํ๊ฒ ๋ง๋๋ ๊ฒ์ ์ด๋จ๊น์? ์๋ฅผ ๋ค๋ฉด ์ธ์ ์ถ๊ฐ ํค์๋ type
๋ฐ immutable
๋ ์ ootype
๋๋ ๋ญ๊ฐ.
๊ทธ๋ฆฌ๊ณ af๊ฐ af ()์ ๊ณตํต์ ์ด ์๋ค๋ ์ฌ์ค์ ํ์์ ๋น ๋ฅด๊ฒ ๋ฌด๋ ๋จ๋ฆฝ๋๋ค.
์ด๊ฒ์ด @JeffBezanson์ ์๋ฏธ๋ฅผ ๋ช ํํ ํ ์ ์์ต๋๊น?
a.f()
์๋ํ๋ค๋ฉด a.f
๋ ์ผ์ข
์ ๋ฉ์๋ ๊ฐ์ฒด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์, ์์์ด. ์, ๋ถ๋ช
ํ map(t.method,collection)
๊ฐ์ ๊ฒ์ ํ ์ ์์ต๋๋ค.
obj.method(...)
๋ฅผ ํ์ฉํ๋ฉด ์๋ก์ด ์ฌ์ฉ์๊ฐ ์ค๋ฆฌ์๋ฅผ ํ์ด์ฌ, ๋ฃจ๋น ๋ฑ๊ณผ ๊ฒฝ์ํ๋ ค๋ ๋ ๋ค๋ฅธ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก ๊ฐ์ฃผํ๊ณ ์์ ํ ๊ฐ์ฌํ์ง ์์ ์ํ์ด ์๋ค๋ @ mauro3 ์ ๋์ํฉ๋๋ค ๋ค์ค ๋์คํจ์น ์ธ ๊ต์ฅํจ. ๋ค๋ฅธ ์ํ์ ํ์ค oo ์คํ์ผ์ด ์ง๊ธ๊น์ง ๊ฐ๋ฐ ๋ ๋ ๋ง์ ์ค๋ฆฌ์ ์คํ์ผ๊ณผ๋ ๋ฐ๋๋ก ์ฌ์ฉ์๊ฐ ๋ ์ต์ํ ๋ฐฉ์์ผ๋ก ์ฐ์ธํ๊ฒ๋๋ค๋ ๊ฒ์
๋๋ค.
DataFrames ์ด์ธ์ ์ฌ์ฉ ์ฌ๋ก๋ oo ์ธ์ด์์ ์ํธ ์ด์ฉ์ผ๋ก ์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์์ด ๋ชจ๋ ๊ฒ์ด ๋งคํฌ๋ก๋ก ์ฒ๋ฆฌ ๋ ์ ์์ต๋๊น? ์ฆ, <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 ...)
#์ ๋จ์ง ์ฌ ์์ฑ์ผ๋ฟ์ ๋๋ค.
๋ฉ์๋ (t, args ...)
์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ ์ ์ pyobj.func
pyobj[:func]
๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ผ๋ฏ๋ก PyCall์๋ ํ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด pyobj.func()
๋ ์ค์ ๋ก (pyobj.func)()
์
๋๋ค.
a.foo(x)
๋ฅผ foo(a, x)
a.foo(x)
๋ก ๋ค์ ์์ฑํ๋ฉด PyCall์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค. foo
๋ Julia ๋ฉ์๋๊ฐ ์๋๊ณ Julia ๋ฉ์๋๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐํ์์ ๋์ ์ผ๋ก ์กฐํํด์ผํฉ๋๋ค. . 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๋ ๊ทธ๋ค์ง ์ค๋๋ ฅ์ด ์์ต๋๋ค. ๋ ์บ๋ฆญํฐ๊ฐ ํ์ํ๋ค๋ ๋๋์ด ์์ฃผ ... 2 ๋ฑ์
๋ฐ๋ฉด์ ..
๋ $
, @
๋๋ |
๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ์
๋ ฅ๋ฉ๋๋ค. Shift ํค๋ฅผ ๋๋ฅผ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. , ๋ ๋ฌธ์ ์ธ ๋์ ์๊ฐ๋ฝ์ ๋์ผํ ํค์ ์ ์ง๋ฉ๋๋ค.
@stevengj ์,
JavaCall์ ๊ฒฝ์ฐ ์ค์ ๋ก ๋ณธ์ง์ ์ผ๋ก unknownProperty ํธ๋ค๋ฌ ๋ง ํ์ํฉ๋๋ค. ์ค์ ๋ก ๊ธฐ์กด ์์ฑ ์ฝ๊ธฐ ๋๋ ์ฐ๊ธฐ๋ฅผ ๋ค์ ์ฐ๊ฑฐ๋ ๊ฐ๋ก ์ฑ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด "x๊ฐ ๊ธฐ์กด ์์ฑ์ด ์๋ ๊ฒฝ์ฐ์๋ง ax๊ฐ getfield (a, : x)์ ๋ค์ ์ฐ์ฌ์ง๋ค"๋ผ๋ ๊ท์น์ด ๋ฌธ์ ๋ฅผ ์ ์ํํ๋ ๋ฐ ๋์์ด ๋ ๊น์?
@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(...)
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>
์๋ "๊ฐ์ธ ํ๋"๊ฐ ๋์ด๋ฉ๋๋ค. ๋ชจ๋์ ๊ฒฝ์ฐ Mod.foo
์ ๊ธฐ๋ณธ ๊ตฌํ์ Mod..foo
ํ๊ณ ์ฌ๋๋ค์๊ฒ Module
์ getfield ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ง ๋ง๋ผ๊ณ ์๋ ค์ฃผ๋ ๊ฒ์ด ๊ด์ฐฎ์ต๋๊น? ๋ด ๋ง์, ๋น์ ์ ์ด๋ฏธ ์ ์ ๋ง์
์ ์ธ์ด์์ ์ฌ์ ์ ํ ์ ์์ต๋๋ค โ ๋ชจ๋ ์ง์ฅ์ด ํ๋ฆฌ๊ณ ๋น์ ์ segfault๋ฅผ ์ป์ง ๋ง ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ง์ผ๋ ค ๊ณ ํ์ง ์์ต๋๋ค. ์ด๋ณด๋ค ๋ ๋์ ์๋ ์์ฃ ?
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ค์ ๋ก ์ด๋ฆ ์ง์ ์๋ง ๊ด์ฌ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ค ๊ทธ๋ณด๋ค ์ฝ๊ฐ ๋ ๋์ฉ๋๋ค. ์ด๋ฆ์ ํ์ธํ๋ ๊ฒ์ด ์ ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ค์ํฉ๋๋ค.
์ ํ์ ์ฌ์ง๊ฐ ๋ง์ง ์์ง๋ง Mod.foo
๊ธฐ๋ณธ๊ฐ์ Mod..foo
๋ก ์ค์ ํ์ง๋ง ์ผ๋ถ ์์น์์๋ ๋ถํธ ์คํธ๋ฉ์ Mod..foo
๋ฅผ ์ฌ์ฉํด์ผ ํ ๊ฒ์
๋๋ค. ..
์ฐ์ฐ์๊ฐ ์์ผ๋ฉด ๋์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ํด Core.getfield
๋ฅผ ํธ์ถ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๊ทธ๊ฒ์ผ๋ก, ์ฐ๋ฆฌ๋ ์๋ง ์ ๊ฑฐ ํ ๊ฒ Core.getfield
๋ง์ด ..
.
๊ทธ๊ฒ์ ๊ณต์ ํ ์์ ์
๋๋ค โ ๋ช
๋ช
์ ํ๋ก๊ทธ๋๋ฐ์์ ์ผ์ข
์ ํฐ ๋ฌธ์ ์
๋๋ค :-). ์ข์ ๋ฐฉ๋ฒ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ..
์๊ณ Core.getfield
.
์ด ๋ ๊ฐ์ง ์์ด๋์ด,
[...] ๋งค๋ด์ผ์ ๋ท๋ถ๋ถ์ ๋ํธ ์ค๋ฒ๋ก๋ฉ์ ๋ฃ๊ณ ์ ์คํ๊ฒ ์ ํํ ๋ช ๊ฐ์ง ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋๋ก ๊ถ์ฅํฉ๋๋ค @stevengj https://github.com/JuliaLang/julia/issues/1974#issuecomment -38847340
๊ณผ
[...] ๊ธฐ๋ณธ ์ค์ ์ ๊ฐ๋ฅํ ํ ๋ง์ด x.property ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ด์ผ ํฉ๋๋ค. https://github.com/JuliaLang/julia/issues/1974#issuecomment -38694885
๋ถ๋ช ํ ๋ฐ๋ํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ์์ด๋์ด๋ฅผ ์ ํํ๋ ค๋ฉด "์ ์คํ๊ฒ ์ ํํ ์ฌ๋ก"์ ๋ํด ์ ..
์ฐ์ฐ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฅ์ ์ฌ์ฉ์ผ๋ก ..name
ํ์ฌ ๊ฒฝ์ฐ์ [:name]
์ฌ์ฉ (DataFrames๋, DICT๋ {๊ธฐํธ, ...}) ๊ฒ๋ณด๋ค ์
๋ ฅ / ๊ตฌ๋ฌธ ๋ช
ํ ํ๋ ์ก์ธ์ค์์ ํด๋น ๋ญ๊ฐ ๋ค๋ฅธ ์ง์ ์นํ์ ๋์ ์ผ์ด๋๊ณ ์์๋ค. ๋ํ ..name
์ ์ด์ค ์ ์ ํ์ ๋ ์ฝ๋ก , :name
๊ธฐํธ ๊ตฌ๋ฌธ์ ๋ํ ํํธ๋ก ๋ณผ ์ ์์ผ๋ฉฐ ํญ ์์ฑ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋จ์ ์ผ๋ก PyCall et al. ์๋ ๊ตฌ๋ฌธ์ ๋๋ฌด ๊ฐ๊น์ง ์์ ๊ฒ์
๋๋ค (๊ทธ๋ฆฌ๊ณ .
์ค์ ๋ก ์ฌ์ฉํด์ผํ๋ ๊ฒฝ์ฐ์๋ ํผ๋ ๋ ์๋ ์์ต๋๋ค). ํ์ง๋ง ์์งํ ๋งํด์ Julia๋ Python ๊ตฌ๋ฌธ๊ณผ ์์ ํ ํธํ๋์ง ์์ผ๋ฉฐ Python์์ ๊ฐ๋จํ ๋ช
๋ น์ ์ํํ๊ธฐ ์ํด PyCall์ ์ฌ์ฉํ์ฌ Julia์ ๋ง์ด ์
๋ ฅํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ํญ์์์ ๊ฒ์
๋๋ค. ..
๋ฅผ ์๋ฎฌ๋ ์ดํธํ๋ .
๋ ์ฌ๊ธฐ์์ ์ข์ ๊ท ํ์ ์ ๊ณต ํ ์ ์์ต๋๋ค. (์คํดํ์ง ๋ง์ธ์. ์ ๋ 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
์ด ์ํฉ์์ ๋ด ๋ณด๋ธ Person์ ์ฌ์ ํ โโ'name'๊ณผ 'age'์ฒ๋ผ ๋ณด์ ๋๋ค.์ด ๊ฒฝ์ฐ age๋ ํ๋๋ฅผ ์ถ๊ฐํ๋ ํจ์๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ์ ๋๋ค. ๋ชจ๋ Person ๋ด๋ณด๋ด๊ธฐ๋ export Person. * ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ผ๋ก ์ํ ๋ ์ ์์ต๋๋ค.
[pao : ์ธ์ฉ๊ตฌ]
@emeseles ์ค๋ฆฌ์ ์ฝ๋์ ๊ฐ์ ๊ฒ์ ์ธ์ฉ ํ ๋ ๋ฐฑํฑ์ ์ฌ์ฉํ๋๋ก์ฃผ์ํ์ญ์์ค. ์ด๋ ๊ฒํ๋ฉด ์์์ด ์ ์ง๋๊ณ Julia์ ๋งคํฌ๋ก๊ฐ ๋น์ทํ ์ด๋ฆ์ ์ฌ์ฉ์์ ๋ํ GitHub ์๋ฆผ์ ์์ฑํ์ง ๋ชปํฉ๋๋ค.
.
๋ฐ ..
์ (๋) ํผ๋ ์ค๋ฝ์ต๋๋ค. ๋ช
ํํ๊ณ ๊ธฐ์ตํ๊ธฐ ์ฌ์ด ์ ํ์ค๋ ์ข์ ๊ฒ์
๋๋ค.
๋๋ ์ด๊ฒ์ ํ ์ ์๊ธฐ๋ฅผ ์ ๋ง๋ก ๊ณ ๋ํ๊ณ ์๋ค. ์ด๊ฒ์ 0.4 ํ๋ก์ ํธ๋ก ํ๋๊ทธ๋ฅผ ์ง์ ํ๊ธฐ ์ํด (๋๋ # 5848์ WIP) ์ถฉ๋ถํ ํฐ ๋ณ๊ฒฝ์ ๋๊น?
๋ค, ํ์คํ ํ๋ก์ ํธ์ ๋๋ค.
๋๋ ์ฐ๋ฆฌ ๋๋ถ๋ถ์ด ์ ์ด๋ ์ฒ์๋ถํฐ ๊ถ์ฅ๋๋ ์ฌ์ฉ์ ์ ํํด์ผํ๋ค๋ ๋ฐ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด ๋๋์ ์ฒ์์๋ ์ํธ ์ด์ฉ์ฑ (PyCall์์์ ๊ฐ์ด ๋ค๋ฅธ ์ธ์ด์์ ์ฌ์ฉ, ์ ํ๊ธฐ๋ฒ์ด ์์ฐ์ค๋ฌ์ด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๊ณผ ์๋ง๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ ( get_foo(x)
์ดํ)์ ๋ ๊ฐ์ง ์ฉ๋๋ก๋ง ๊ถ์ฅ๋์ด์ผํ๋ค๋ ๊ฒ์
๋๋ค. set_foo!(x, val)
์ ์ถํฉ๋๋ค).
์ธํ ์ํธ ์ด์ฉ์ฑ์ ์ํด์๋ง ๊ถ์ฅํ๋๋ผ๋ ๊ทธ ๋ชฉ์ ๋ง์ผ๋ก๋์ด ๊ธฐ๋ฅ์ ์ ๋นํํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. Julia์ ๊ฐ์ ์๋ก์ด ์ธ์ด์ ๊ฒฝ์ฐ ๋๋จธ์ง ์ํํธ์จ์ด ์ธ๊ณ์ ์ํํ๊ฒ ๋ํํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
Steven, ์ ๋ getter / setter์ ๋ํด 100 % ํ์ ํ์ง ๋ชปํฉ๋๋ค. ๊ณง ๋ถ์ผ์น๋ก ์ด์ด์ง ๊น๋ด ๋๋ ต์ง ๋ง ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก์๋ ๋์ํฉ๋๋ค. ๊ทธ ์์ Gtk.jl ๋์ ์์ฑ์๋ ๊ตฌ๋ฌธ์ ์ด์ ๋ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ฅ ์ข์ํ๋ ๊ฒ์ Stefan์ด # 5842์์ ์ค๋ช ํ ์ด๊ฑฐ ํ ๊ตฌํ์ ๋๋ค.
์ถฉ๋. ์ด ๋ฌธ์ ์ ์งํ์ ๋ฐฉํดํ๋ ๊ฒ์ ๋ฌด์์ ๋๊น? ๊ฒฐ์ ์ด ํ์ํฉ๋๊น, ์๋๋ฉด์ด ๋ฌธ์ ๊ฐ ์์ง ์๋ฃ๋์ง ์์ ๋ค๋ฅธ ๋ด๋ถ ๋ณ๊ฒฝ์ ์์กดํฉ๋๊น, ์๋๋ฉด ๋จ์ง ์ฝ๋ฉ์ ๋๊น?
์ด ๋ฌธ์ ์ ์งํ์ ๋ฐฉํดํ๋ ๊ฒ์ ๋ฌด์์ ๋๊น?
์ผ์ํ๋ ์ฌ๋๊ณผ ๊ทธ๊ฒ์ด ์ณ์ ์ผ์ธ์ง์ ๋ํ ์ฝ๊ฐ์ ๋ง์ค์.
@ihnorton์ ์ด๋ฏธ # 5848์์ ์ด๊ธฐ ์ด์ ๊ตฌํ์ ์ํํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ์ํ๋ ๊ธฐ๋ฅ์ธ์ง ์ฌ๋ถ์ ๋ํ Julia ํต์ฌ ํ์ ๋ช ํํ ์ง์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ์์ ์ด ์ค๋จ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ด๊ฒ์ผ๋ก ์น์ ํ๊ณ ์๋ค. @JeffBezanson ์ด ์ธํ๋ฆฌ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์๊ฒ๋์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ๋๊ท๋ชจ Python ์ฝ๋๋ฒ ์ด์ค์์ Julia๋ก ์ฝ๊ฒ ์ ํ ํ ์ ์์ต๋๋ค. ํ์๋ค์ ์ค๋ช ํ๊ธฐ ์ํด ํ์ด์ฌ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ต์ํ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ด ํ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋์ด ์ค๋ ๋์์ ์์ ๋
ผ์๋ฅผํ์ง๋ง ์ฌ์ ํ ์์ ํ ํฉ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ํ์ฌ ๋ช๋ช ์ฌ๋๋ค์ ๊ณต์ฉ API๊ฐ ํจ์ / ๋ฉ์๋๋ก ๊ตฌ์ฑ๋๊ณ ๊ฐ์ธ API๋ ๋ณตํฉ ์ ํ์ ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด ๊ณํ์์ ๋งค์ฐ ๋๋ฌธ ์์ธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. (LU ๋ถํด์์ .U
?)
ํ์ด์ฌ ์ก์ธ์ค์ ์ด๊ฑฐ ํ์ด ์ ์ฉํ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋ด๊ฐ ๋ฐ๋ํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ์ฌ์ ํ ์ฌ๊ธฐ๊ฐ ์ผ๋ง๋ ๊ธด๊ธํ์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์ฃผ๊ธฐ๊ฐ ๋๋ ๋ ์ด๊ฒ์ ๋ฐ์ด ๋ถ์ด๋ ๊ฒ์ด ํ๋ช ํ ์ง ์๋ฌธ์ ๊ฐ์ง ์ ์์ต๋๋ค.
@ ufechner7 , ์ฃผ์ ๋๊ธฐ๊ฐ ์ธ์ด ๊ฐ ์ํธ @tknopp , ์ฐ๋ฆฌ๋ ์ด์ ๊ฐ์ ๊ฒ์ ๋ํด ๋ง์ฅ์ผ์น๋ก ํฉ์ํ์ง ์์ ๊ฒ์ ๋๋ค. ๊ถ๊ทน์ ์ผ๋ก @JeffBezanson ๊ณผ @StefanKarpinski๊ฐ ๊ฒฐ์ ํ๋
๋ง์ ๋ง์ค์์ด Jeff์ ์ต์ ์ ์ ๋ชฝ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์์ ๋น๋กฏ๋ ๊ฒ ๊ฐ์ต๋๋ค.
module DotOrientedProgramming
Base.getfield(x, ::Field{:size}) = size(x)
Base.getfield(x, ::Field{:length}) = length(x)
โฎ
end
์ ๋ ์ด๊ฒ์ ๋งค์ฐ ์ซ์ดํ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ์ค์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ํจํค์ง๋ ์ ๋ฅผ ํฌํจํ์ฌ ์์คํ ์ _all_ ์ ํ์ ์ค์ฉ์ ๊ฐํ ๊ฒ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋งค์ฐ ๊ฐ๋ ฅํ๋ฉฐ Julia๊ฐ ์์ฑ๋๋ ๋ฐฉ์์ ๋ฐ๊ฟ ๊ฒ์ ๋๋ค. ๋ ์ข๊ฒ, (์๋ง๋ ์ข์ง๋ง) ๋์๊ฒ.
์, ์คํฐ๋ธ, ์ ๋ง์ด ์ ์ ํ์ง ์์ ์๋ ์์ต๋๋ค. ์ ๊ฐ ๋งํ๊ณ ์ถ์๋ ์์ ์์ด ๋ณํ๊ฐ ์ธ์ด๊ฐ ์ด๋ป๊ฒ ๋ฐ์ ํ ๊ฒ์ธ์ง์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ์ด์์์ ๊ฐ์ง๊ณ ์๋ "๊ณต์์ ์ธ ์ธํฐํ์ด์ค"์์ด๋์ด๋ .
์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ์ํฅ๋๋ฐ์ต๋๋ค. ์, @JeffBezanson ๊ณผ @StefanKarpinski๊ฐ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ฌ์ ํ ๋ฌธ์ ๋ ๊ฒฐ์ ์ด ์ง๊ธ ์ํ๋์ด์ผํ๋์ง ์ฌ๋ถ์
๋๋ค ...
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ ๊ฑฐ์ ๋ชจ๋ ๊ตฌ๋ฌธ์ ์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ๋ฌธํ์ ์์กดํ์ฌ ๋๋ฌด ์ผ์์ ๋น ์ง์ง ์๋๋กํ๋ ๊ฒ์ ์ ํธํ์ต๋๋ค.
+1 . ์ฌ๊ธฐ์ call
์ค๋ฒ๋ก๋ฉ์ ๋ํ ๊ฐ๋ ฅํ ์ฒ ํ์ (๊ทธ๋ฆฌ๊ณ ์๋ง๋ ์ค์ฉ์ ์ธ ...) ์๋ ๋ก๊ทธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ค๋ช
์์๋ Don't do stupid stuff: we won't optimize that
์น์
์ด ํ์ํฉ๋๋ค. (๋ฌผ๋ก , call
์ค๋ฒ๋ก๋ฉ์ ์ฑ๋ฅ์์ ์ด์ ๋ก ๋ถ๋ถ์ ์ผ๋ก _for_ํ์ง๋ง ๋จ์ฉ์ ๊ฐ๋ฅ์ฑ์ด ๋ง์ฐํฉ๋๋ค.)
์ ๋ฐ์ ์ผ๋ก ๋๋ ์ฐฌ์ฑํฉ๋๋ค. ํ๋ ๊ฐ๋ฅ์ฑ์ด ๊ฐ์ฅ ํฐ ๊ฑฑ์ ์ ์๋๋๋ค. ๋์๊ฒ ํฐ ๋ฌธ์ ๋
a..b
๊ทธ๋ค์ง ์ข์ํ์ง ์์ต๋๋ค.์ด๋ฌํ ๋ฌธ์ ๋ ๋ ๊ฐ์ง ๋ชจ๋์ ๋ํด ๋์ผํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํ ๋ฒ์ ํด๊ฒฐํ ์ ์์ง๋ง์ด ์์ ์์ ๋ชจ๋์ ๋ํด .
์ด์ธ์ ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์ํ๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. _ ๋ด๋ถ์ ์ผ๋ก _ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ์ํ ์ถ์ ๊ตฌ๋ฌธ์ด์์ ๊ฒ์
๋๋ค. ๊ทธ๊ฒ์ ๋๋ฌ ๋ผ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ค๋ง ์ค๋ฌ์ธ ๊ฒ์
๋๋ค.
์ด ์ง๋ฌธ์ ๋ํ ๋์ ๋ ์ผํธ : ์ ์๊ฒฉ์๋ ์ด๋ฆ์ :
๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๊น? ์ด๋ฏธ ๋น์ทํ ์ฉ๋๋ก ์ฌ์ฉ ์ค์
๋๋ค.
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
๊ฐ ๋ชจ๋์ด๋ฉด ๋จผ์ ๋ชจ๋ ์กฐํ๋ฅผ ์ํ"์ ์๋ฏธํ๋๋ก ๋ง๋ค ๊ฐ๋ฅ์ฑ์ ์ธ๊ธํ๋ ค๊ณ ํ์ต๋๋ค. ๋์์ด ๋ ์ ์์ผ๋ฉฐ ๋ชจ๋ ์กฐํ์ ์๋ฏธ๋ฅผ ์ฌ์ ์ํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ getfield(a,:b)
ํธ์ถ๋ก a.b
๋ฅผ ๋ํ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ์ ๋ณต์ก์ฑ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. ์์ ์ ๋ถ๊ธฐ๊ฐ์๋ ํน์ AST ๋
ธ๋ ์ฌ์ผํฉ๋๋ค. ๋ฌผ๋ก ์ฐ๋ฆฌ๋ _explicit_ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๋๋ ๊ทธ๊ฒ์ผ๋ก๋ถํฐ AST ํฝ์ฐฝ์ ๋ํด ๊ฑฑ์ ํ ๊ฒ์
๋๋ค.
ํ๋ฐํธ ์๋์ ๋ฐฑ ์๋์ ์๊ตฌ ์ฌํญ ์ฌ์ด์ ์ด๋ฌํ ํฐ ๊ฐ๋ฑ์ ์ฝ๊ฒ ํด๊ฒฐํ ์์๋ ๋ฐฉ๋ฒ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋๋ค์ด a..b
์ข์ํ๋ค๋ฉด ๊ทธ๊ฒ์ผ๋ก ์ฌ๋ ๋ฒ์ ๋ฐฐ์ธ ์์์ ๊ฒ ๊ฐ์์. ๊ทธ๊ฒ์ ์์ ํ ๋ค๋ฅธ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ์๋ง๋ ๊ฐ๊ฒฉ.
๋๋ a..b
๋ ์ซ์ดํ์ง๋ง ์ ๊ทธ๊ฒ์ด ํ์ํ์ง ๊ถ๊ธํฉ๋๋ค. ์ด ์ค๋ ๋๋ฅผ ์ฝ์ ๋ ์ค๋ฒ๋ก๋ฉ์ ์ค์ ํ๋ ์ก์ธ์ค๊ฐ ํ์ํ์ง ์์ ์ธ์ด ๋ํผ ๋ฐ ๋์ ์ฌ์ฉ ์ฌ๋ก์์๋ง ์ฌ์ฉ๋๋ค๋ ์ธ์์๋ฐ์ต๋๋ค.
์ด๋ค ์์ ์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ์ฒด์ ํํ์ ์ก์ธ์คํด์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๊ฒ์ ์๋์ ์ผ๋ก ๋๋ฌผ๊ณ get_actual_field(a,:x)
์ฒ๋ผ ์ถ์
ํ ์ ์๋ค๊ณ ์ฃผ์ฅ ํ ์ ์์ง๋ง ์ด๊ฒ์ ๊ตฌ๋ฌธ์ ๊ฐ์ง ์๊ธฐ์๋ ๋๋ฌด ์ค์ํ ์ฐ์ฐ์ฒ๋ผ ๋ณด์
๋๋ค.
๋๋ ์์ง๋ง ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์๋ฌด๋ ์ฌ์ฉํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ตฌ๋ฌธ์ ์ฐพ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๋์?
..
์ ๊ณตํ์ง ์๋ ๊ฒ์ ๋์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์๋ผ๊ณ ๋งํ๋ ๋ฐฉ๋ฒ์ด์ง๋ง ์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ์๋์ค๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋ํธ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ง์ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์์ @mbauman ์์ ๋ฅผ ๊ณ์ ์ํ ํ ์ ์์ต๋๋ค.
a..b
๊ตฌ๋ฌธ์ ์ผ์ข
์ ๊ฐ๊ฒฉ์ฒ๋ผ ๋ณด์ด์ง๋ง (์ด๋ ๊ฒ ์ฌ์ฉํ์ต๋๋ค) ๊ฐ๊ฒฉ ์ฐ์ ์๋ ์์ฒด ์
๋ ฅ ๊ตฌ๋ฌธ์ด ํ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. Interval(a,b)
๊ฒ์ ๊ด์ฐฎ์์. ์ง๊ธ๊น์ง ์ค๋ฆฌ์์์ ์ฐ์ฐ์๋ก ์ฌ์ฉ๋์ด ์๊ณ ๋๊ตฌ๋ ๊ทธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์ถ์ดํ๋ ์ฌ๋์ด ๋ง์ง ์์ต๋๋ค. ๋ํ ํ๋ ์ก์ธ์ค์ฒ๋ผ ๋ณด์
๋๋ค.
์ด๊ฒ์ ๋ํ ํ ๊ฐ์ง ์์ ์๊ฐ์ ์ฐ๋ฆฌ๊ฐ ๋์ฐํ module_name
์ m..name
๋์ฒด ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. Module ๊ฐ์ฒด์ ํ๋์ ์ก์ธ์ค ํ ์ ์๋ค๋ ๊ฒ์ ์ฌ๋ง๊ท์์ต๋๋ค.
์, ์ ๋
a.b
๊ฐ "a
๊ฐ ๋ชจ๋์ด๋ฉด ๋จผ์ ๋ชจ๋ ์กฐํ๋ฅผ ์ํ"์ ์๋ฏธํ๋๋ก ๋ง๋ค ๊ฐ๋ฅ์ฑ์ ์ธ๊ธํ๋ ค๊ณ ํ์ต๋๋ค. ๋์์ด ๋ ์ ์์ผ๋ฉฐ ๋ชจ๋ ์กฐํ์ ์๋ฏธ๋ฅผ ์ฌ์ ์ํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋getfield(a,:b)
ํธ์ถ๋กa.b
๋ฅผ ๋ํ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ์ ๋ณต์ก์ฑ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. ์์ ์ ๋ถ๊ธฐ๊ฐ์๋ ํน์ AST ๋ ธ๋ ์ฌ์ผํฉ๋๋ค. ๋ฌผ๋ก ์ฐ๋ฆฌ๋ _explicit_ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๋๋ ๊ทธ๊ฒ์ผ๋ก๋ถํฐ AST ํฝ์ฐฝ์ ๋ํด ๊ฑฑ์ ํ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐํจ์ผ๋ก์จ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ 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})
๊ฐ ์ ์ ๋ ๊ฒฝ์ฐ a.b
๋ ๋์ ๋ฒ์ ์
๋๋ค. ์ด ๊ฒฝ์ฐ ์ค์ ํ๋ ์ก์ธ์ค๊ฐ ๊ฐ๋ ค ์ง ์ ์์ต๋๋ค.๋ด ์ง๋ฌธ์ ์๋ ์์ด ์ข์ง ์์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋์ง ์ฌ๋ถ์์ต๋๋ค.
์; pyobject.x
์ ์ ์ํ์ฌ x
๋ชจ๋ x
๋ํด ํญ์ pyobject์ ์ฌ์ ์์ ์กฐํ๋๋๋ก ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ pyobject์ julia ํ๋์ ์ก์ธ์คํ๋ ค๋ฉด ๋ณ๋์ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค.
Ahhh, ๊ทธ๋์ ์ ๋ถ ์๋๋ฉด ์๋ฌด๊ฒ๋? ์ด๋ป๊ฒ ๋ ๊ฐ์ง ์์๋ ์ธ์์ ๋ฐ์์ต๋๋ค
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!
์ฌ์ ์๋ฅผ ํ์ฉ ํ ๊ฒ์
๋๋ค. ํ์ด ์ ํ์ด๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ๋ณ ๋ทฐ๋ฅผ ๋
ธ์ถํ๋ ๊ฒ์ด ์ ๋ง ๋ง์์ ๋ญ๋๋ค.
๋ค, ์ ์ธ์์ด์์ต๋๋ค.
์ข์, IMHO๋ ์ค์ ํ๋ ์ก์ธ์ค์ ..
๋ฅผ ์ฌ์ฉํ ์ง ์๋๋ฉด Core.getfield
๋ฅผ ์ฌ์ฉํ ์ง ๊ทธ๋ค์ง ํฐ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์ผ๋ฐ ๊ธฐ๋ฅ์ ์คํ์ ์ผ๋ก ๋์
ํ์ฌ ๋ณ๊ฒฝ ๋ ์ ์์ต๋๋ค.
๋ฌธ์ ๋ ์ด๊ฒ์ด 0.4์ ์๊ฐ ํ๋ ์์ ๋ง๋์ง ์ฌ๋ถ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ต์ข ๊ตฌํ๊ณผ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์๋ # 5848?
@johnmyleswhite : ๋๋ ๋ํ ์ด๊ฒ์ ๋์นญ์ผ๋ก ๋ง๋ค๊ณ setfield!
ํ์ฉํ๋๋ก ํฌํ ํ ๊ฒ์
๋๋ค. Gtk.jl์์๋ ๋ ๋ค ์ฌ์ฉํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋์ ์ฌ์ฉํ์ง ์์ ๋ ๊ท์น์ด ๋ฌด์์ธ์ง ๋ช
ํํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฉ์๋ / ํ๋๋ฅผ ๋์ ์ผ๋ก ์กฐํํด์ผํ๋ฏ๋ก Julia ๋ฉ์๋ / ๋ณตํฉ ์ ํ์ด ๋ ์์๋ PyCall์ ์์ ์ ํ์ธํ์ต๋๋ค (๊ฒฐ๊ณผ ๊ตฌ๋ฌธ์ Python์ ๋ ๊ฐ๊น์ต๋๋ค). ๊ทธ๋ฐ๋ฐ ์ Gtk.jl์ ์ฌ์ฉํฉ๋๊น? ์ด ์ผ์ ์์ํ๋ฉด foo.bar = x
๋์ setbar!(foo, x)
, ๋ค์ ํ์ค ์ค๋ฆฌ์ ์ฝ๋๊ฐ invitably๋์ด ํจํด์ ์ฌ์ฉํ์ฌ ์์๋ฉ๋๋ค : ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฌด์์ธ๊ฐ? ์๋ง๋ ๊ทธ๋ด ์๋ ์์ง๋ง ๊ทธ๊ฒ์ ๋ํด ๋ถ๋ช
ํํฉ์๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ถ์ (๊ทธ๋ฆฌ๊ณ ๊ตฌ์ฒด์ ๋) ์ ํ์ ๋ํด ์ ์ ๋ ์์ฑ getter ๋ฐ setter๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ํ์ฉ / ๊ถ์ฅ๋ฉ๋๊น?
๋ค๋ฅธ ์ ํ์ ๋ค๋ฅธ ๋ชจ๋์์ ์์ฑ์ ๊ฐ์ ธ ์ค๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฉ์๋์ ์ด๋ฆ ์ถฉ๋์ ํผํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐธ๊ณ : https://github.com/JuliaLang/julia/issues/4345 , https://groups.google.com/forum/#!msg/julia -users / p5-lVNlDC8U / 6PYcvvsg29UJ
@nalimilan : Gtk๋ getter / setter๊ฐ ์๋ ๋์ ์์ฑ ์์คํ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
@tknopp ์,
์ด ์์ ์์ (๊ทธ๋ฆฌ๊ณ ์ฌ๋ฐ๋ฅธ ๊ท์น์ ํ์
ํ๊ธฐ ์ํด ์ฝ๊ฐ์ ์คํ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค) f
๊ฐ "์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋
๋ฆฝ ์คํ ํ ๊ฐ๋
์ผ๋ก ์ดํด ๋ ๋ f(x)
๊ฐ ๋ ์ข์ต๋๋ค. f
๊ฐ x
์ ์ค์ ๋ก ๋
๋ฆฝ์ ์ด์ง ์์ ๊ฒฝ์ฐ x.f
์ฌ์ฉํด์ผํฉ๋๋ค. ๋ด ์ด์ ์์ ๋ฅผ ์ฌ๊ธฐ์ ๋ง์ถ๊ธฐ ์ํด, ๋๋ถ๋ถ์ ๋ฒกํฐ์ ์ปฌ๋ ์
์๋ ๋จ๊ณ ๊ฐ๋
์ด ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ step
ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ ๋ก ์ ์ฉํ์ง ์์ต๋๋ค. ๋ฒ์๊ฐ์์ ๋ _only_ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ด๋ค ์ข
๋ฅ์. ๋ฐ๋ผ์ x.step
๋ฒ์๋ฅผ x
๋ฒ์์ ๋จ๊ณ๋ก ๊ฐ์ ธ ์ค๋ ๋ฐฉ๋ฒ์ด๋๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๊ฒ์ ์ฝ๊ฐ์ ํ๋จ ํธ์ถ์ด์ง๋ง ์ธ์์ ๊ทธ๊ฒ๋ค๋ก ๊ฐ๋ ์ฐจ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
..
์ ๋์๊ฒ ์ง์ ์ ๊ทผ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์์ ๋ค์ง ์์ต๋๋ค. foo.bar.
๋ ์ด๋ป์ต๋๊น? ๋์์๋ ์ถ๊ฐ ์ ์ ์ง์ ์ก์ธ์ค ํ ์ ์๋๋ก ๊ณ ์ ํฉ๋๋ค.
์ ๋ ์ฝ๋ ๊ธฐํธ๋ฅผ ์ ํํ ์๋ ์์ต๋๋ค. ์ฌ์ ํ ๋ง์ ๊ธฐํธ๊ฐ ๋จ์ ์์ต๋๋ค.
@GlenHertz , ํ๋ ์ก์ธ์ค๋ฅผ ์ฐ๊ฒฐํด์ผํ๋ ๊ฒฝ์ฐ ์ค์ ๋ก ์๋ํ์ง ์์ต๋๋ค.
@simonbyrne , ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ์ฝ๋ ์ฌ์ฉ์ ํ์๋กํ๋ ํต์ฌ ์ธ์ด ๋๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ๊ฒ์ ๋ฐ๋ํฉ๋๋ค. ๊ทธ๊ฒ์ ํ์ฉํ๋ ๊ฒ๊ณผ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๋ ๊ฒ์ ์์ ํ ๋ค๋ฅธ ๊ฒ์ ๋๋ค.
์ด ์์ ์์ ์ ์๊ฐ์ (๊ทธ๋ฆฌ๊ณ ์ฌ๋ฐ๋ฅธ ๊ท์น์ ์์ ๋ด๊ธฐ ์ํด ์ฝ๊ฐ์ ์คํ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค) f (x)๋ f๊ฐ "๊ธธ์ด"์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ ๋ฆฝํ ๊ฐ๋ ์ผ๋ก ํฉ๋ฆฌ์ ์ผ ๋ ๋ ๋ซ์ง ๋ง xf๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. f๊ฐ x์ ์ค์ ๋ก ๋ ๋ฆฝ์ ์ด์ง ์์ ๋.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ ๊ฐ์ธ์ ์ธ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ธ์ด ์ํธ ์ด์ฉ์ฑ ๋๋ "๊ฑฐ์ ํ๋"๋๋ "์ฆ๊ฐ ํ๋"์ธ ํญ๋ชฉ์๋ง ์ด๊ฒ์ ์ฌ์ฉํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ์ ํ์ ๋ชจ๋ ํ๋ ๊ฐ์ ์์กดํ๋ ์บ์๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์ด๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ํ ํ ๊ฐ์ง ํฐ ์ง๋ฌธ์ ์ ํ ์ถ๋ก ๊ณผ ์ด๋ป๊ฒ ์ํธ ์์ฉํฉ๋๊น? 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 : ์, ์ค๋ฒ๋ก๋ ๋ ํ๋๋ ๋์ ์์ฑ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ด ์ ์์จ์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ํ๋ ๋ฐฉ์์ด๊ณ ์ ๋ ์ด๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ์ค์ getter ๋ฐ setter๋ ์๋ ์์ฑ๋์ง๋ง ๋ชจ๋ get / set ์ด๋ฆ ์ง์ ์์ด๋ ์ฌ์ ํ ์๋ํฉ๋๋ค. GAccessor
๋ชจ๋์ ๋ผ์ด๋ธ (์งง์ G_
)
๊ตฌ๋ฌธ์์ ์ค์ ํ๋ ์ก์ธ์ค์ <-
๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
๋๋ค์ ์ฌ์ฉ๋๋ C ++์ ->
์ ์ ์ฌํ์ง๋ง <-
๋ ํ์ฌ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ ํ์์ ์ฝ์ ์ ์์ผ๋ฉฐ ๊ฐ์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
.. ์ธํฐ๋ฒ์์ ์ฌ์ฉํ๊ณ ์ถ์ ์ฌ๋๋ค์๊ฒ๋ ๋ฏธ์ฌ์ฉ ์ํ๋ก ๋จ๊ฒจ๋๊ณ ์ง๊ธ๊น์ง ์๊ฐํ ์์๋ ๋ค๋ฅธ ์ฉ๋๊ฐ์๋ ๋ฏธ์ฌ์ฉ ํ์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
ํ๋ ์ก์ธ์ค์ R์ ํ ๋น ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
->๋ฅผ ์ฌ์ฉํ์ฌ C / C ++๋ฅผ ์ง์ ๋ฏธ๋ฌ๋งํ๊ณ ์๋ก์ด ๊ตฌ๋ฌธ์ ์ป์ ์ ์์ต๋๋ค.
์ต๋ช
๊ธฐ๋ฅ. ๋๋ ์ต๋ช
์ ๊ธฐ๋ฅ์๋ณ๋ก ์ ๊ฒฝ์ ์ฐ์ง ์์์ต๋๋ค.
๊ตฌ๋ฌธ์ด ์ฝ๊ฐ ๊ฐ๊ฒฐํ๊ฑฐ๋ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋์ ํ ์ ์์์ง๋ ๋ชฐ๋ผ
๋ญ๊ฐ
func (x) x ^ 2 ๋
๋๋ ๋ ๊ธธ๊ณ ์ผ๊ด๋
ํจ์ (x) x ^ 2 ๋
์๋ง๋ ํ์ํ์ง ์์ ์ข์ ๊ตฌ๋ฌธ์ ์๊ฐ ํด๋ผ ์์๋ ๋ฐฉ๋ฒ์ด์์ ๊ฒ์
๋๋ค.
๋์ ์ฌ์ฉํ์ฌ.
ํ ๋ก ์ ๋๋ฌด ๋ง์ด ๋ณ๊ฒฝํ์ง๋ ์์ง๋ง ํ์คํ ์ดํด๊ฐ ๋ ๊ฒ์
๋๋ค.
์ค์ ํ๋ ์ก์ธ์ค๋ฅผ ์ํด->๋ฅผ ์ฌ์ฉํฉ๋๋ค.
2015 ๋
1 ์ 28 ์ผ ์์์ผ ์ค์ 8:49, John Myles White [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์ด ์ ์ํ ์ ๋ ์ฝ๋ ๋ฌธ์๋ ์ต์
์ผ๋ก ๊ด์ฐฎ์ต๋๋ค). 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))
์ ๋ Julia๋ฅผ ์ฒ์ ์ ํ์ง๋ง ๋ค์ค ํ๊ฒฌ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ๋น ๋ฅด๊ฒ ๊ฐ์ฌ๋ฅผ ๋ฐ์์ต๋๋ค. ํนํ ๊ณผํ์ ํ๋ก๊ทธ๋๋ฐ์์ํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ง์ ์์ ์ ๋ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. OO ํจ๋ฌ๋ค์ / ๊ตฌ๋ฌธ์ด Julia์ ์คํ์ผ ๊ฐ๋ฐ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ๊น ๊ฑฑ์ ๋ฉ๋๋ค.
๋๋ ๋ฌธ์์ด ์ธํด ๋ฐ / ๋๋ ์ธ์ฉ์ ๋ํด ์์ด ๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ :
someobj <: field_name |> length
@elcritch , <:
๋ ํ์ฌ Julia์ "is subtype of"์ฐ์ฐ์๋ก ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, :>
๊ฐ ๋์
๋๋ฉด ์ ํ ๊ด๋ จ ํญ๋ชฉ์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒ์
๋๋ค. ์ธ์ต ์ฌ์ฐ.
instance..member
์ด ๋ฌธ์ ์ธ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋์ ๊ฐ๋ฆฌ์ธ์! ์ด๋ค ๋ชจ๋๊ฐ ๋ ๋์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
instance^.member
(๋น๊ทผ ๋ํธ)instance~.member
(๋ฌผ๊ฒฐํ)instance:.member
(์ฝ๋ก ์ )instance*.member
(๋ณํ)instance-.member
(๋์ ์ )[email protected]
(at-sign ์ )instance&.member
(์ฐํผ ๋ํธ)instance$.member
(๋ฌ๋ฌ ๋ํธ)instance<.>member
(์ฐ์ฃผ์ ์ )๋๋ ์์งํ (a) ..
์ถฉ๋ถํ ์ข์ ๋ณด์ธ๋ค๊ณ ์๊ฐํ๊ณ (b) ์ด๊ฒ์ด ์ธ์ด์ ๋ชจํธํ ๊ตฌ์์ด ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ด ๋ฉ์ ธ ๋ณด์ด๋์ง ์ฌ๋ถ๋ ์ค์ ๋ก ์ค์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ instance.member
์ฌ์ฉํฉ๋๋ค. ํ๋ ๋๋ getfield
๋ฉ์๋ ๋ง ์๊ณ ๋ ๋ค ๊ฐ์ง ์๋ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
(์ด ๋ฌธ์ ์ ๋ํด ๋ฉค๋ฒ์ ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ ค๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ..
์ ๋ํด ๋ฐฐ์ฐ๋ ๋ฐ ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์
๋๋ค. foo.member
๋ํ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ "real "field foo._member
. ์ด์จ๋ ์ด๊ฒ์ ๋ ๋์ ์คํ์ผ์
๋๋ค. ์ฆ, type
์ ์๋ฅผ ์ฝ์ ๋ _member
๊ฐ ๋ฌด์ธ๊ฐ๊ฐ ์๋์ด์ผํ๋ค๋ ๊ฒ์ด ์ฆ์ ๋ถ๋ช
ํด์ง๋๋ค. ์ง์ ์ก์ธ์ค ํ ์ ์๊ฑฐ๋ ์ก์ธ์คํด์ผํฉ๋๋ค. ์ด๋ ๊ท์คํ ๊ตฌ๋์ ๋ถ๋์ฐ์ ์ฐจ์งํ์ง ์๊ณ :.
์ ๊ฐ์ด๋ณด๊ธฐ ํํ๊ณ ๋ชจํธํ ๊ฒ์ผ๋ก ..
๋ฅผ) ๋ง๋ค์ด์ผํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.)
..
๋ฅผ ์ค์ ๊ฐ๊ฒฉ ์ฐ์ฐ์๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋์น ์ ์์ง๋ง ์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ ํ๋ ์ก์ธ์ค๋ ๊ฐ์น์๋ ์ ์ถฉ์์
๋๋ค. ์ฝ๋ก ์ ๋ ์ด์ ์๋ฏธ๋ฅผ ์ถ๊ฐ ํ๋ ๊ฒ์ ์ฝ๊ฐ ๋๋ ค์ :.
์ ๊ทธ๋ ๊ฒ ๋์์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
:.
๋ ํ์ฌ symbol(".")
๋ํด ์ค์ ๋ก ์ ํจํ ๊ตฌ๋ฌธ์ด๋ฏ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง ์์ ์ ์์ต๋๋ค. ..
๊ฐ ์ ์ฌ์ ์ผ๋ก ์ ์ฉํ๋ค๋ ์ ์ ์ ๋ฐ์ ๋ค์ฌ์ก์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ฌด๋ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ ๊ตฌ๋ฌธ์ ๋ญ๋นํด์๋ ์๋ฉ๋๋ค. @.
์ ๊ฐ์ ๋ ์ถ์
ํ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ๊ธฐ์ฉ๋๋ค ( .
๋ ์ ํจํ ๋งคํฌ๋ก ์ด๋ฆ์ด ์๋๊ณ ์๋ณ์๋ฅผ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฒ๊ณผ๋ ์ถฉ๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค ). ๋ค์ ๋งํ์ง๋ง, ์ด๊ฒ์ Julia์ ๋ชจํธํ ์ฝ๋๊ฐ ๋ ๊ฒ์ด๋ฏ๋ก ๊ทธ๊ฒ์ ์์๊ฒ ๋ง๋ค ๊ฐ์น๊ฐ ์์ต๋๋ค.
..
์ฌ์ฉํ์ฌ์ด ์์
์ ์ํํ๊ณ ์ ์ฌ์ ์ถ์
ํจ์ ๋ฌด์ํ๋ ๋ฐ +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 ์ ์ ์๊ณผ๋ ๋ฌ๋ฆฌ "์ค์ "ํ๋ ์ก์ธ์ค๋ฅผ ์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ ๋ง ์ ์ํ์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ์ค์ ํ๋๋ฅผ ์ค๋ฒ๋ก๋ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ ๋ง์กฑํ ๊ฒ์
๋๋ค. ๋จ, ์ธ์ด์ ๋์ ํน์ฑ์ผ๋ก ์ธํด ๊ตฌํ์ด ํจ์ฌ ๋ ๋ณต์กํด์ง ๊ฒ์
๋๋ค. ๋น์ ์ด์๋ ๊ฒฝ์ฐ "๋ชจ๋ -overloadable"์ ๊ทผ ๋ฐฉ์ ์๋ฅผ ๋ค์ด, x::Vector{Any}
, ๋ค์ ์ผ์ x[i].y
ํด์ ๋ ์ getfield(x[i], Field{:y})
๋ฐ ํ๊ฒฌ ์์คํ
์ ๊ด๊ณ์์ด ์ฌ๋ถ์ ์ณ์ ์ผ์ ํ ๊ฒ์
๋๋ค y
์ ์ค์ ํ๋์ด์ง๋ง "๊ฐ์"ํ๋์ ๋ํด getfield
๋ง ํธ์ถํ๋ ค๋ ๊ฒฝ์ฐ ์ฝ๋ ์์ฑ๊ธฐ๋ x[i]
์ ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ์ํด ๋์คํจ์น ์์คํ
์ ๋ฏธ๋์ด์ฒ ํ์ ์งํฉ์ ๊ตฌํํด์ผํฉ๋๋ค.
๋ ๋ค๋ฅธ ์ง๋ฌธ์ Module.foo
์ด ์ค๋ฒ๋ก๋ ๊ฐ๋ฅํด์ผํ๋์ง ์ฌ๋ถ getfield
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ผ์ ํ ์ผ๊ด์ฑ์ด ์์ผ๋ฉฐ, ์์์ ์ธ๊ธ ํ Vector{Any}
์์ ์๋ Module
๋ฐฐ์ด ๋ฉค๋ฒ๊ฐ์์ ์ ์์ผ๋ฏ๋ก์ด ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํด์ผํฉ๋๋ค. ์ด์จ๋ . ๋ฐ๋ฉด์ @JeffBezanson ์ ์ด๊ฒ์ด ์ปดํ์ผ์ ๋ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ function Base.sum(...)
์ ๊ฐ์ ์ ์ธ์ ๋์์ ๊ทธ๋ฃจ ํน ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์๋ค๊ณ ์ง์ ํ์ต๋๋ค. ๋ด๊ฐ ์ ํธํ๋ ๊ฒ์ ์ ์ด๋ ์ง๊ธ์ ์ปดํ์ผ๋ฌ๊ฐ Module
(์ฆ, Vector{Any}
์๋)๊ณผ ํจ๊ป ์๋ํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ ๊ฒฝ์ฐ์ Module.foo
์ค๋ฒ๋ก๋๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์
๋๋ค. ; ๋ณ๊ฒฝ๋๋ ์ฌํญ์ ๋ํด ๋ณด์์ ์ด๊ธฐ ์ํด์๋ ์ฝ๊ฐ์ ๋ถ์ผ์น๊ฐ ๊ทธ๋งํ ๊ฐ์น๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Module.foo
์ค๋ฒ๋ก๋๋ฅผ ํ์ฉํ์ง ์์ผ๋ ค๋ฉด +1ํฉ๋๋ค.
์ฌ๊ธฐ์์ OO ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ตฌ๋ฌธ์ด ์ค์ ๋ก FP๋ณด๋ค ์ฐ์ํ ๊ณผํ ์ปดํจํ ์์ญ ์ค ํ๋๋ ์์ด์ ํธ ๊ธฐ๋ฐ ๋ชจ๋ธ๋ง์ ๋๋ค. ์์ด์ ํธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค์ ํ๊ธฐ์ํ ๊ตฌ์ฒด์ ์ด๊ณ ๋ค์ค ์์์ด ๊ทธ๋ฆฌ์์ก์ง๋ง Julia์ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ์ถ์ํ์ ๋น ๋ฅธ ํ๋กํ ํ์ดํ์ ๋๋์ต๋๋ค. ์ด๋ฏธ ๋ช ๊ฐ์ ABM ํ๋ ์ ์ํฌ๊ฐ ๋ํ๋ฌ์ต๋๋ค.
ABM์์๋ ์์ด์ ํธ ์ํธ ์์ฉ์ ํํํ๋ ๋ฐ ์ ํ๊ธฐ๋ฒ์ด ์ ํธ๋ฉ๋๋ค : Agent1.dosomething (Agent2) ๋ dosomething (Agent1, Agent2).
์ด ๋ช ๋ฐฑํ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฌ์ฉ ์ฌ๋ก๋ ์๋์ง๋ง ABM์ ๋ํด ์๊ฐํ๊ณ ์ฝ๋ฉ ํ ๋์ด ๊ตฌ๋ฌธ ์คํ์ ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ํ Julia์์์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ๊ฐ์ด
๋์์ธ์์ ๊ธฐ๋ฅ ์งํฅ์ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฌํ๋๋งํผ
๊ด์ , ๋ฉ์๋ ํธ์ถ ๊ตฌ๋ฌธ์ ๋งค์ฐ ์ ์ฉํ๊ณ ์ฌ๋ฌ
๋๋ฉ์ธ. Ab (C)๊ฐ b (A, C)์ ๊ฐ์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค.
2015 ๋
4 ์ 22 ์ผ ์ค์ 8์ 50 ๋ถ์ "datnamer" [email protected]์ด ์์ฑํ์ต๋๋ค.
์ฌ๊ธฐ์ OO ํ๋ก๊ทธ๋๋ฐ์ด์๋ ๊ณผํ ์ปดํจํ ์ ํ ์์ญ์
๊ตฌ๋ฌธ์ ์ค์ ๋ก FP๋ณด๋ค ์ฐ์ํฉ๋๋ค. ์์ด์ ํธ ๊ธฐ๋ฐ ๋ชจ๋ธ๋ง์ ๋๋ค. ๋น๋ก ๋ด๊ฐ
์์ด์ ํธ ๊ณ์ธต์ ์ค์ ํ๊ธฐ ์ํด ๊ตฌ์ฒด์ ์ด๊ณ ๋ค์ค ์์์ ๋์น๋ฉด
Julia์ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ์ถ์ํ์ ๋น ๋ฅธ ํ๋กํ ํ์ดํ์
๋๋ผ์ด-์ด๋ฏธ ๋ ๊ฐ์ 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)
์ด b(a,c)
์ ๋๋ฑํ๋ค๊ณ ์ ์ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ผ์ด๋์ง ์์ ๊ฒ์
๋๋ค.
์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ ์ ์ ๋ค๋ฅธ ์ธ์ด์์ ์์ฐ์ค๋ฌ์ด ์ํธ ์ด์ฉ์ ์ํด ์ค์ํฉ๋๋ค. ๊ทธ๊ฒ ์ถฉ๋ถํ ์ด์ ์ ๋๋ค.
Subject.Verb (DirectObject)
์ฌ๋ฌ ์ํฉ์์ ์๋นํ ์์ฐ ์ค๋ฝ์ต๋๋ค. ๋ง์ OO ํ๋ก๊ทธ๋๋จธ๊ฐ
ํจ์ (A, B)์ ๋จ์ํ ์ฌ์ ๋ ฌ์ด์ง๋ง, ๊ทธ ์ฌ์ ๋ ฌ์
๊ฐ๋
์ฑ์ ์ํด ๋ง์ ์ผ์ํฉ๋๋ค, IMO.
2015 ๋
4 ์ 22 ์ผ ์ค์ 10:32์ "Andy Hayden" [email protected]์ด ์์ฑํ์ต๋๋ค.
ABM์์๋ ์์ด์ ํธ ์ํธ ์์ฉ์ ํํํ๋ ๋ฐ ์ ํ๊ธฐ๋ฒ์ด ์ ํธ๋ฉ๋๋ค.
Agent1.dosomething (Agent2) ๋ dosomething (Agent1, Agent2).๊ทธ๊ฒ ๋ ๋์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/JuliaLang/julia/issues/1974#issuecomment -95256390.
๋๋ ๊ทธ๊ฒ์ ์ ์ํ๋ค. (์ฃ์กํฉ๋๋ค. ์ ์์ ์์ํ ์๊ฐ๋ ์์์ต๋๋ค.
๊ทธ ์ ์์ ์ธ๊ธฐ๊ฐ ์์ ๊ฒ์
๋๋ค.) ๋๋ ์ด๊ฒ์ด ์ ์ ๋์จ ๊ฒ์ ๋ณธ ์ ์ด ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
ํฌ๋ผ์์ ์ด๋ฏธ ํด๊ณ ๋์๋ค๋ ์ฌ์ค์ ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค.
๋์ ์๊ฐ. ์ด์ ๋ฅผ ๋ฌผ์ด๋ด๋ ๋ ๊น์? (์ค๋ ๋๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๊น?)
๊ฐ์ฌ.
2015 ๋
4 ์ 22 ์ผ ์ค์ 11:09, "Steven G. Johnson" [email protected]
์ผ๋ค :
์ฒ ์๋ฒ์ ๋ํ ์ข ๊ต์ ์ ์์ ๋น ์ ธ๋ค์ง ๋ง์์ฃผ์ธ์. ๋ฟก๋ฟก
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, Julia์ ๊ธฐ๋ฅ์ด ๊ฐ์ฒด ๋ด๋ถ๊ฐ ์๋๋ผ ํ์ฌ ๋ฒ์์์ ์กฐํ๋๋ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ฌ๋๋ค์ด ์ฌ๋ฌผ ๋ด๋ถ๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์์ํ ๊ฒ์ด๋ผ๋ ๋๋ ค์์ด ์ ๊ณผ๋ถํ๋ฅผ ๋ง์ ์จ ์ด์ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@toivoh , ๋ํธ ์ค๋ฒ๋ก๋ฉ์ ๋ชจ๋ ๊ตฌํ์ ๊ธฐ์กด ๋ฉ์๋ ๋์คํจ์น๋ฅผ โโ์ฌ์ฉํ๋ฏ๋ก ๋ฒ์ ์ง์ ๋์์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. @ dbeach24 , a.b(c)
๋ฌด์ฐจ๋ณ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์๋ ๊ธฐ๋ณธ ์ด์ ๋ ๋์ผํ ์์
์ ์ํํ๊ธฐ์ํ ๊ตฌ๋ฌธ์ด ๋๋ฌด ๋ง์ผ๋ฉด ์ธ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ง์ด๋๊ธฐ ๋๋ฌธ์
๋๋ค. ํ๋์ ์ฒ ์๋ฅผ ๊ณ ๋ฅด๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค. Julia์ ์ฌ๋ฌ ๋์คํจ์น๋ b(a,c)
์ ํธํฉ๋๋ค. b
๊ฐ a
"์์ "๋์ด ์์ง ์๋ค๋ ๊ฒ์ด ๋ ๋ถ๋ช
ํ๊ธฐ ๋๋ฌธ์
๋๋ค โ 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)์ฒ๋ผ ์ทจ๊ธํ์ญ์์ค.
๋๋ _might_ํ์ง๋ง ์ต๋ช
ํจ์๋ฅผ ์ ์ฅํ๋ ๋ฉค๋ฒ๊ฐ์๋ ๊ตฌ์กฐ์ฒด (์ ํ)๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ Julia๋ก ์์ฑ๋ ํจ์๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ก๋ ํ ๋ค์ ๊ตฌ๋ฌธ ๋ถ์์ ์ํํ๊ณ ํจ์๋ฅผ ๊ฐ์ฒด์ ์ ์ฅํฉ๋๋ค.
๊ทธ๋ฐ ์ผ์ํ๊ธฐ์ ๋ ๋์โ์ค๋ฆฌ์โ์คํ์ผ์ ๋ฌด์์ผ๊น์?
๊ฐ์ฌ!
@ScottPJones ๋๋ ์ด๊ฒ๋ค์ด ๋๋ฑํ์ง ์์์ผํ๋ค๋ ํฉ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค *.
"์คํ์ผ"๊ท์น์๋ ์์ธ๊ฐ์์ ์ ์์ง๋ง, ์ ์ค๋ฒ๋ก๋ฉ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋์ ํจ์๋ฅผ ๋ฃ์ผ๋ ค๋ฉด ๊ฐ๋ ฅํ ์ฌ๋ก๊ฐ ์์ด์ผํฉ๋๋ค. ๋๋ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ํด / ๊ทธ๋ค์ด ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ด๋ฆฌ์์ ์ง์ํ์ง ๋ง์์ผํ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๊ฒ์ ์์ผ ์๋ ์์ง๋ง ๋ ์ข์ ๋ฐฉ๋ฒ์ด์์ ์๋ ์์ต๋๋ค (ํ์คํ ์ ์ผํ ๋ฐฉ๋ฒ์ ์๋๋๋ค) ...
99 % ์ด์์ ๊ฒฝ์ฐ typeof (a)์์ ๋์คํจ์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ธฐ๋ฅ ํ๋, ๋ํธ ์ค๋ฒ๋ก๋ฉ ์์.
* _ ๊ทธ๋ฐ๋ฐ์ด ๋ ์ ๋ฐ๋ก ๊ทธ๋ฐ ์ผ์ํ๋ ํจํค์ง๊ฐ์์ ๊ฑฐ๋ผ๋ ๊ฑด ๋ค๋ค ์์ค ๊ฒ ๊ฐ์์ ..._
D์์๋ a.b(arg)
๋ํด "uniform function call syntax"๋ผ๋ ์ด๋ฆ๋ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ฝค ์ธ๊ธฐ๊ฐ ์์ง๋ง, Julia๊ฐ ์๋ํ๋ ๋ค์ค ๋์คํจ์น ๋ฐฉ์ ์ธ ์ผ๋ฐ ํจ์์๋ ์๋นํ ์ผ์นํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌธ์ ์ ํจ์๊ฐ ์ต๋ช
์ด๊ฑฐ๋ ์์ ํ ๋ ํ์์ด๋ฉด ๋ชจ๋ ๊ฒ์ด ์๋ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ์๋นํ ์ ํ์ ์ธ IMO์
๋๋ค. ํด๋์ค ๊ธฐ๋ฐ์ ์ ํต์ ์ธ OO ์ธ์ด์ ์ต๊ด์ ์ ์ธํ๊ณ ๋ ๋ณตํฉ ์ ํ ์์ ํจ์ ํ๋๋ฅผ ์ ์ฅํ ์ด์ ๊ฐ๋ณ๋ก ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋๊ฐ์์๋ก๋ํ๋ ๊ฒฝ์ฐ ์ผ๋ฐ ํจ์๋ฅผ ์ ์ฅํ๋ ๋ ์ข์ ์์น๋ ๋ชจ๋์
๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ง๊ธ "์ค์ง์ ์ธ ์ง๋ฌธ"๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค. ๋ํ getfield ์ค๋ฒ๋ก๋ฉ์ ํ์ฉํ๊ณ , ๋ชจ๋์์ getfield ์ค๋ฒ๋ก๋ฉ์ ํ์ฉํ์ง ์์ผ๋ฉฐ, "true getfield"์ ๋ํ ํน์ ๊ตฌ๋ฌธ์ ๋ํด ๋๋ฌด ๊ฑฑ์ ํ์ง ์๋ ๋ฐฉ์์ ๋ํด ๋ณด์์ ์ธ ํ๋๋ฅผ ์ ํธํฉ๋๋ค.
@stevengj : ์, ์ ๊ฐ a.b(c)
๊ฐ b(a, c)
์ ๊ฐ๊ฒ๋๋ ์ผ์ด ๊ฒฐ์ฝ ์ผ์ด๋์ง ์์ ๊ทผ๋ณธ์ ์ธ ์ด์ ์ค ํ๋์
๋๋ค. .
์ด๊ฒ์ ๋ํ ๋ฉ์ผ ๋ง๋ฆฌ์คํธ์ ๋ํ ํ ๋ก ์ด์์์ต๋๋ค. ๋ด ๊ด์ ์์์ด ์ค๋ ๋์ ๋ํ ๊ฐ์ฅ ๊ด๋ จ์ฑ์ด ๋์ ๊ฒ์๋ฌผ (@nalimilan)์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://groups.google.com/d/msg/julia-users/yC-sw9ykZwM/-607E_FPtl0J
์ด ๊ธฐ๋ฅ์ ์ธ์ ์ฌ์ฉ ํด์ผํ๋์ง ์ ๋ํ ๊ฐ์ธ ์ ์ฑ
์ ๋ํ ์๊ฒฌ ์ ์ถ๊ฐํ๋ฉด ์ผ๋ถ HTTP ์์ด๋์ด๊ฐ ์ฌ๊ธฐ์์ ์ ์ฉ ํ ์ ์์ผ๋ฉฐ getfield()
์๋ ๋ถ์์ฉ ๋ฐ setfield!()
๊ฐ ์์ด์ผํฉ๋๋ค. ๋ฉฑ๋ฑ์ด์ด์ผํฉ๋๋ค (์ฆ, ๋์ผํ ๊ฐ์ผ๋ก ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ฉด ํ ๋ฒ ํธ์ถํ๋ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ๊ฐ ์์ด์ผํฉ๋๋ค). ๋ฐ๋์ ์ปดํ์ผ๋ฌ์ ์ํด ๊ฐ์ ๋๋ ์๊ฒฉํ๊ณ ๋น ๋ฅธ ๊ท์น์ ์๋์ง๋ง ๋๋ฌด ๋ฏธ์น๊ฒ ๋ง๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ์ํ ์ฌ์ฉ ์ง์นจ์
๋๋ค.
ํฌ์ธํฐ ๋งค๊ฐ ๋ณ์๊ฐ์๋ ๋งค๊ฐ ๋ณ์ ์ ํ์ ์ฌ์ฉํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฒ์ํ๊ณ ํ๋๋ฅผ ์ค์ ํ ๋ ์ฌ์ฉ์ ์ง์ setter๋ฅผ ํธ์ถํ๋๋ก ๋ณํํฉ๋๋ค.
๊ฒ์๋ฌผ : https://groups.google.com/forum/#!topic/julia -users / _I0VosEGa8o
์ฝ๋ : https://github.com/barche/CppWrapper/blob/master/test/property.jl
setfield๊น์ง์ด ๋ฐฉ๋ฒ์ ํจํค์ง์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํด์ผํ๋์ง ๊ถ๊ธํฉ๋๋ค! ๊ณผ๋ถํ๊ฐ ๊ฐ๋ฅํฉ๋๊น, ์๋๋ฉด ํ๋ผ ๋ฉํธ๋ฆญ ์ ํ ์์คํ ์ ๋๋ฌด ๋ง์ ์คํธ๋ ์ค๊ฐ ์์ต๋๊น?
getfield
/ setfield!
์ค๋ฒ๋ก๋ฉ์ ์ถ๊ฐ ์ด์ ํ๋๋ฅผ ์ธ๊ธํ๊ณ ์ถ์ต๋๋ค. ์ด๊ฒ์ด ์ ์ ํ ์ฅ์๊ฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฃ์กํฉ๋๋ค. (https://groups.google.com/forum/#!topic/julia-users/ThQyCUgWb_Q์ ๊ด๋ จ ์ฃผ์ ๊ฐ ์ฌ๋ผ์ด)
getfield / setfield๊ฐ์๋ Julia! ์ค๋ฒ๋ก๋ฉ์ _external package_์์ autoreload ๊ธฐ๋ฅ์ ๋๋๋๋ก ์ฐ์ํ ๊ตฌํ์ ํ์ฉํฉ๋๋ค. (์ด ๊ธฐ๋ฅ์ ์ป๊ธฐ ์ํด 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
ํํ์ a.b
-> getMember(a, :b)
์ AST๋ฅผ ๋ณํํ๋ ๋งคํฌ๋ก
0.6์์ ์ ๊ฑฐํ๋ฉด ์ด๊ฒ์ด ์ข์ ์์ด๋์ด๋ผ๋ ํฉ์๊ฐ์๊ณ ๋ํธ ๊ตฌ๋ฌธ์ผ๋ก ์ํ ํ ์์ ์ ๋ํด ์์ถฉ๋๋ ์ ์์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
@Keno : ์์ถฉ๋๋ ์ ์์ ๋ํ ๋งํฌ๊ฐ ์์ต๋๊น?
@StefanKarpinski ๊ฐ ์์ง ์์ฑํ๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง ๊ณง Julep์ด ๋์ฌ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
fieldname(object)
๋๋ get_fieldname(object)
์ ๊ฐ์ getter ํจ์๋ณด๋ค object.fieldname
๋ ์ข์ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. object.fieldname
(๋๋ object$fieldname
)๊ฐ getpublicfield
(๋ ๋์ ์ด๋ฆ ์ผ ์ ์์)์ ๋ํ ํธ์ถ์ด๊ณ object..fieldname
๊ฐ ์ค์ getfield
(๋น๊ณต๊ฐ)๋ ์ข์ ์ต์
์ด ๋ ์ ์์ต๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ ํ์ getter ๋์ 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?)์ ๋ถ์ด๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ์ฌ!
Jeff์ ์ ๋ ๋ค์ค ์ธ์ ์ฌ๊ฑด์ ๋ํด ๋ ผ์ํ์ง ์์์ต๋๋ค. ๋ด ๋๋์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ง์ํ ์๋ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ธ์๊ฐ์๋ ๊ฒฝ์ฐ์์ ํจ์๋ฅผ ๋ฐํํ์ฌ ์ด์จ๋ ์๋ฎฌ๋ ์ด์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค (ํ์ง๋ง ๊ฐ์ ์ด์ ๋ก ์ฆ์ ์ํํ๋ ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค).
๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์บ์คํ
ํ๊ณ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค.
์ด๋ ๊ฒ :
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 %, ์ ๋ง ์ฆ๊ฑฐ์ด ๋๋ผ์์ ๋๋ค). ๋ฐ๋ผ์ ์ด๊ฒ์ ๋ช ๊ฐ์ง ์ ๋ฌธํ ํด๋ฆฌ์คํฑ์ด ํ์ํ๊ณ ์ด๊ธฐ ์ต์ ํ๊ฐ ์ ๋ฐ์ดํธ๋์ด์ผํ์ง๋ง ๊ทธ๋ ๊ฒ๋๋ฉด ์คํ ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.
๊ทธ ๊ตฌํ์ผ๋ก ํ ์คํธ๋ฅผ ํต๊ณผ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋์ต๋๋ค. ์ด ์๋ฏธ ์ฒด๊ณ๊ฐ codegen์ด ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๊ฒํ์ง ์์ต๋๊น? ๋ํ ์ ์ญ ๋ณ์๋ฅผ ํจ์ฌ ๋ ๋น์ธ๊ฒ ๋ง๋ค ๊ฒ ๊ฐ์ต๋๋ค (์๋์ ๋ฉ๋ชจ๋ฆฌ). ์ด๊ฒ์ด sysimg์ ๋ํ๋ ๊ฐ๋ฅ์ฑ์ ๊ทธ๋ฆฌ ํฌ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ถ๋ก ์ ํ๊ฐ ์ฌ๊ธฐ์์ sysimg๋ฅผ ๋ ์๊ฒ ๋ง๋ค์์ด์ผํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง 5 % ๋ ๋๋น ์ง๋ ๊ฒ์ ์ข์ ์์์ฒ๋ผ ๋ค๋ฆฌ์ง ์์ต๋๋ค.)
์, jl_resolve_globals
์์ด๋ฅผ ์
๋ฐ์ดํธํด์ผํ๋ GlobalRefs๋ก ๋ณํํ๋ ์ฝ๋๊ฐ ์์ต๋๋ค. ๊ทธ ์ธ์๋ ์ฝ๋ ์์ฑ์ด ์ฒ๋ฆฌ ํ ์ โโ์๋๋ก ์ธ๋ผ์ธ ์ฒ๋ฆฌ๋์ด์ผํฉ๋๋ค. ์ถ๋ก ์์ ์ฐ๋ฆฌ๋ getindex
ํํ๊ณผ ๋น์ทํ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ํ์ํ ๊ฒ์
๋๋ค.
ํํ getindex์ ๋น์ทํ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ํ์ํ ๊ฒ์ ๋๋ค.
์ด ํน๋ณํ ๊ฒฝ์ฐ๋ ๋ด์ฅ ๋ getindex
๋ฉ์๋ ์๋ช
๊ณผ ๊ต์ฐจํ๋ ๋ฉ์๋๊ฐ ์ ์๋์ง ์๊ธฐ๋ฅผ ํฌ๋งํ๊ณ ๊ฐ์ ํฉ๋๋ค. ๋๋ ๊ทธ ์ฌ๊ฑด์ด ์ฌ๊ธฐ์ ์ด๋ป๊ฒ ํนํ ์ ์ฉ๋๋์ง ๋ณด์ง ๋ชปํฉ๋๋ค.
::Module
์ ๋ํ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ณ ์๋ ์ ํ ์ ์๋ค๊ณ ๋งํ๊ฒ ์ต๋๋ค.
@JeffBezanson ๊ทธ ์ธ ์ค๋ก ๋ ์ง์ ์ด ์์ต๋๊น? ๋ก์ปฌ ๋น๋์ ์ง์ ์ถ๊ฐํ๋ ค๊ณ ํ์ง๋ง ์ค๋ฆฌ์๊ฐ ์ง๊ธ ์ฏค ์ด๋ ํ ๊ฒ ๊ฐ์์ ์๋ํ์ง ๋ชปํ์ต๋๋ค.
์ค๋ฆฌ์ 1.0์ ๊ธฐ๋ฅ์ ๋ํ ์์์ด ํ๋๋ง ์๋ค๋ฉด ์ด๊ฒ์ด ๋ ๊ฒ์ด๋ผ๊ณ ๋งํด์ผํฉ๋๋ค. Mimi ์ Query ์์ ๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ ๊ฐ์ง ์ค๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค.
์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ๋ ๊ฝค ์ผ๋ฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋งคํฌ๋ก์์ ์๋ก์ด ์ ํ์ ์์ฑ ํ ํ์๊ฐ์๋ NamedTuples ๋ฒ์ ์ ๊ทธ๋ฌ๋ฉด ๋ค์ ๊ณผ ๊ฐ์ ํ๋ ์ธํธ๋ก NamedTuple
๋ฅผ ๋ฐํํ๋ ์์ฑ ๋ ํจ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์์ฑ ๋ ํจ์์์ ๊ณ์ฐ๋ฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ์ง๊ธ๊น์ง Query.jl์์ ๊ฐ์ฅ ํฐ ๊ฑธ๋ฆผ๋ ์ธ blackrock / NamedTuples.jl # 4์ type-stable ๋ฒ์ ์ ์์ฑํ ์์๊ฒ ํด์ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ๋จํ ๋งํด์ ์ด๊ฒ์ ์ค๋ฆฌ์์ ์ ์ฒด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์คํ ๋ฆฌ์ ๋ํด ๋งค์ฐ ์ ์ฉ ํ ๊ฒ์ ๋๋ค.
์๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
function (obj::MyType).plus(n::Int)
return obj.val + n
end
์ ์ธ์์์ ๊ทธ ๊ตฌ๋ฌธ์ ์ํ์ญ๋๊น?
์ฐ๊ณ ์ถ์ obj.plus(n)
๋์ obj + n
์ฌ๊ฐํ OO ์คํกํ๋ฆ ์ฆํ๊ตฐ์ด๋ค.
์ข์, ์ฃผ์ด์ง ์๋ ์ฌ์ํ ๊ฒ (๊ทธ๋ฆฌ๊ณ ๋์ ๊ฒ)์ด์์ต๋๋ค.
getfield
์ค๋ฒ๋ก๋ ๋์ ์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์ธ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์์ด๋์ด์์ต๋๋ค.
๋๋ ์ฃผ๋ก ๊ธฐ๋ฅ์ ๊ด์ฌ์ด ์์ต๋๋ค. getfield
์ค๋ฒ๋ก๋ฉ์ ๋ํ ์ถ์ฝ ๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ ํจ์ฌ ๋ ์ค์ํด ๋ณด์ด๋ฉฐ ๋
ผ์ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ํ getfield
๋ฐ setfield!
getindex
๋ฐ setindex!
์ง์ ๋ฏธ๋ฌ๋งํ๋ฏ๋ก Julia์์๋ ๋ค์ ์์ฐ ์ค๋ฝ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก, OO ์คํ์ผ์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ Julia์ ๊ด์ฉ๊ตฌ์ ์ ํฉํ์ง ์์ผ๋ฉฐ, OO์ ๊ฐ์ ๋ฉ์๋ ์ ์ ๊ตฌ๋ฌธ์ผ๋ก ๊ถ์ฅํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค (ํ์ง๋ง ์ธ์์ ๋ํ ์์ ์๊ฒฌ ์ฐธ์กฐ ).
๋์๊ฒ ์ผ์ด๋ ํ ๊ฐ์ง๋ $
์ฐ์ฐ์๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ์, ์ด๊ฒ์ ๋ถ๋ช
ํ $(x, sym::Symbol) = ...
์ ๊ฐ์ ๊ฒ์ ์ด๋ฏธ ์ฌ์ฉํ ์์๊ฒ ๋ง๋ค์ง ๋ง, ๋ค์๊ณผ ๊ฐ์ด ๋ ๋ฉ์ง ๊ตฌ๋ฌธ ์ฌ ์์ฑ์ ์ฆ๊ธธ ์๋ ์์ต๋๋ค.
x$y => $(x, ::Type{Val{:y}})
x$z(args...) => $(x, ::Type{Val{:z}}, args...)
๋ณธ๊ฒฉ์ ์ธ getfield ์ค๋ฒ๋ก๋ฉ์ํ์ง ์๊ณ ์ด๋ฏธ์ด ๋ฌธ์ ์์ ์ธ๊ธ ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ฅผ ๋ค๋ฃจ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์งํ .
์ฐ์ฐ์๋ Julia์์ ์๋ฏธ ์ ํฌํ ์ํ์ด๋ฏ๋ก ์ด์ ๊ฐ์ ๊ฒ์ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ ํ ์ ์ฉ ํ ๋งํผ ํธ๋ฆฌํฉ๋๋ค.
@quinnj , ์ด๋ฏธ #
๊ทธ๋ฌ๋ ํ๋ ์ก์ธ์ค๋ฅผ ์ํด ์ด๋ฏธ .
์ด (๊ฐ) ์์ผ๋ฏ๋ก ํ๋ ์ก์ธ์ค์ ์ ์ฌํ ๋ ๊ฐ์ ์ฐ์ฐ์ (ํ๋๋ ์ค๋ฒ๋ก๋ ๊ฐ๋ฅํ๊ณ ๋ค๋ฅธ ํ๋๋ ๊ทธ๋ ์ง ์์ ์ฐ์ฐ์)๊ฐ์๋ ๊ฒ์ ์ข์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฑฐ์ ๋ณดํธ์ ์ผ๋ก .
์ฌ์ฉํ๋ Python ๋ฐ ๊ธฐํ OO ์ธ์ด์ ๋ํ ์ธ์ด ๊ฐ ํธ์ถ์๋ ์ฝ๊ฐ ๋ถ์์ฐ ์ค๋ฌ์ธ ๊ฒ์
๋๋ค.
๋๋ ์ด์ ๊ฐ์ ๊ฒ์ ๋์
ํ๊ธฐ์ํ ์ ํจํ ์ฃผ์ฅ์ผ๋ก ๋ค๋ฅธ ์ธ์ด์์ ์ํธ ์ด์ฉ์ฑ์ ๋ณด์ง ์๋๋ค. ๋ง์น "Python ์ฝ๋๋ ์ด๋ ๊ฒ ์๊ฒผ๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ ์ธ ์ฒ ํ ์ ์์ผ๋ ค๋ฉด ์ฐ๋ฆฌ๋์ด ์์
์ํด์ผํฉ๋๋ค."๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋๋ Julia ์์ฒด๋ฅผ ๋ ์ข๊ฒ ๋ง๋ค๊ฑฐ๋ ๋ ์ผ๊ด๋๊ฒ ๋ง๋ค ๋
ผ์์ ์์ง ๋ณด์ง ๋ชปํ์ต๋๋ค. Julia๊ฐ OOP ์คํ์ผ์ x.f()
๊ตฌ๋ฌธ์ ์ ๊ณตํ์ง ์๋๋ค๋ ๊ฒ์ ์ด๋ฏธ ์ ์๋ ค์ ธ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒ์ ํ์ฉํ๋ ๊ฒ์ ๋ถ์ผ์น๋ฅผ ์๊ตฌํฉ๋๋ค.
@stevengj , ๋ด๊ฐ ์ค๋ ๊ณณ์ ์ผ๋ถ๋ x.f
_isn't_ ํ๋ ์ก์ธ์ค๋ผ๋ ์ฌ์ค์
๋๋ค. ์ค์ ํ๋ ๋ฉค๋ฒ f
์ด (๊ฐ) ์์ต๋๋ค. ์ด ๋ชจ๋ ๋ฌธ์ ๋ getfield ์ค๋ฒ๋ก๋ฉ์ ๊ดํ ๊ฒ์ด๋ฉฐ, x.f
์ค์ ๋ก ํ๋๋ฅผ ์ฐธ์กฐํ๋์ง ์๋๋ฉด ๋ด๋ถ์์ ๋ค๋ฅธ ์์
์ ์ํํ๋์ง์ ๋ํ ์ ์ฌ์ ์ธ ํผ๋์ด ์ฃผ์ ๊ด์ฌ์ฌ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ์ ์ํ ๊ตฌ๋ฌธ ์ฌ ์์ฑ์ ์ฅ์ ์ getfield์์ ์ถ๊ฐ ํผ๋์์ด ์ธ์ด ์ํธ ์ด์ฉ์ฑ ์คํ ๋ฆฌ๋ฅผ ์ถฉ์กฑํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ .
๊ฐ ๊ณผํฌํ ๋ ๊ฒ์ด๋ผ๊ณ ์ธ๊ธํ์ ๋ ์ธ๊ธ ํ ๊ฒ์
๋๋ค. x$f
์ด (๊ฐ) ์ ๋ง ํจ์ฌ ๋ ๋ฒ๊ฑฐ๋ก์ธ๊น์? ์์ด _has_ ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด ๋ชจ๋ ๋ฌธ์ ๋ getfield ์ค๋ฒ๋ก๋ฉ์ ๊ดํ ๊ฒ์ด๋ฉฐ
x.f
์ค์ ๋ก ํ๋๋ฅผ ์ฐธ์กฐํ๋์ง ์๋๋ฉด ๋ด๋ถ์์ ๋ค๋ฅธ ์์ ์ ์ํํ๋์ง์ ๋ํ ์ ์ฌ์ ์ธ ํผ๋์ด ์ฃผ์ ๊ด์ฌ์ฌ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@JeffBezanson ์ ์ธ ์ค ์ ์์ ํผ๋์ ์ฌ์ง๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. a.b
๋ ํญ์ ํ๋ก์ ์
ํจ์ ํธ์ถ๋ก ๋ฎ์์ง๊ณ getfield
ํธ์ถ์ด ์๋๋๋ค. ๊ทธ๋ฐ ๋ค์ getfield
๋ฅผ ํธ์ถํ๋ ํ๋ก์ ์
ํจ์์ ๋ํ ๊ธฐ๋ณธ / ๋์ฒด ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ํ๋ ๊ฒฝ์ฐ ํด๋น ํ๋ก์ ์
ํจ์์ ์์ ์ ์ ํ์ ๋ํ ๋ฉ์๋๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. getfield
ํญ์ ํด๋น ์ ์์์ ๋ฎ์ ์์ค์ ํ๋ ์ก์ธ์ค๋ฅผ ์๋ฏธํ๋ฉฐ ์ฌ์ฉ์๋ getfield
์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ง ์์ต๋๋ค ( "getfield ์ค๋ฒ๋ก๋"๋ผ๋ ์๋ฏธ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค). ๊ทธ๊ฒ์ ๋์๊ฒ ๋งค์ฐ ๊นจ๋ํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋๋ ๊ทธ ์ ์์ด ์์ง ํ
์ด๋ธ์ ์๋์ง ์ฌ๋ถ๋ ๋ช
ํํ์ง ์์ง๋ง ์ดํดํ์ง ๋ชปํ๋ ์ปดํ์ผ๋ฌ ๋ฌธ์ ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค. :)
์ ๋์ด ๊ธฐ๋ฅ์ ์ ๋ง ๊ฐ๊ณ ์ถ์ต๋๋ค (Scala์์ ํญ์ ์ข์ํ์ต๋๋ค). ํ๋์ ์ง์ ์ก์ธ์คํ๋ IMHO๋ Julia์์ ๋งค์ฐ ์์ฐ ์ค๋ฝ์ต๋๋ค (์ : ๋ชจ๋ ๊ฒ์ ๋ํด getter ๋ฐ setter๋ฅผ ๋ฐฉ์ด ์ ์ผ๋ก ์ ์ํ๋ Java ๋ฐฉ์๊ณผ ๋น๊ต). ๊ทธ๋ฌ๋ "๊ฐ์"ํ๋๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ๋ง์ ์ฝ๋๋ฅผ ๊นจ์ง ์๊ณ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ / ๋ฆฌํฉํฐ๋งํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ค์์ง๋๋ค.
๋๋ ์ด๊ฒ์ด v2.0์ผ๋ก ํ๊ทธ๋์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, v1.0์ ๋ํด ์ด๊ฒ์ ์ฌ๊ณ ํ๊ธฐ ์ํด ์ด๊ฒ์ ๋ค์ ๋ถ๋ฌ์ค๊ณ ์ถ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ํจํค์ง / ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ฌ์ฉ์๋ฅผ์ํ ํจํค์ง๋ฅผ ๋น๋ ํ ๋ ์์ฑ ์ ๊ทผ์๋ฅผ ์ค๋ฒ๋ก๋ํ๋ฉด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ํจ์ฌ ๋ ๊นจ๋ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๋ค. ๋๋ ์ฃผ์ฅ ํ ๊ฒ์ ๋๋ค.
complex_data_structure.attribute
์ ๋ ฅํ๊ธฐ ์ฝ์ต๋๋ค.
get(complex_data_structure, :attribute)
์ฌ๊ธฐ์ get
๋ :attribute
์ค๋ช
๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ ์ค๋ ๋ฐ ํ์ํ ํจ์์
๋๋ค.
์ด๋ ์ ์ฌ์ ์ผ๋ก REPL์์ ๊ฒ์ ๊ฐ๋ฅ์ฑ์ ํฅ์์ํฌ ์ ์์ผ๋ฉฐ ์ธ์ด ์ฝ๋ ๋ฐ ๋ฐ์ดํฐ ํ์์ ๋์์ด๋ฉ๋๋ค.
๋ํ, setter ์์ฑ ์ธํฐ์ ํฐ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋ค์ ์์ ๋ฅผ ๊ณ ๋ คํ์ญ์์ค (ํ์ฌ ๋ด ๋ง์ ์คํฌ๋ฆฝํธ์์ ์ด๋ฏธ ๋ฐ๊ฒฌ๋์์ต๋๋ค :)).
set(complex_data_structure, :attribute, modify_attribute(get(complex_data_structure, :attribute), additional_arguments))
์์ฑ getter ๋ฐ setter๊ฐ Julia์ ์ผ๋ถ๋ก ํฌํจ ๋ ๊ฒฝ์ฐ ์์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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)
์์ฑ์๋ ๋๋ฉ์ธ ์ ๋ ฅ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ์ ํ ํ ์ ์์ง๋ง ์ฌ์ฉ์๋ ์ฌ์ ํ ์ ํจํ์ง ์์ ๊ฐ์ ์ ๋ ฅ ํ ์ ์์ต๋๋ค. ์์ฑ getter ๋ฐ setter๋ ์ฌ๊ธฐ์์ ๋ฐ์ดํฐ ์ ํจ์ฑ์ ๋ํ ํผ๋๋ฐฑ์ ๋ ์ฆ๊ฐ์ ์ผ๋ก ๋ง๋ค๊ณ ์ธ์ด ์ฌ์ฉ์๋ก์ ํจ์ฌ ๋ ๊นจ๋ํ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ํ PyCall.jl ๋ฐ DataFrames.jl๊ณผ ๊ฐ์ ๋ค๋ฅธ ํจํค์ง์ ํฐ ์ด์ ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ์๋ฅผ์ํ ๋ ๋์ ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถ ํ ์ ์์ต๋๋ค. ์ด ํจํค์ง์ ์์ฑ์๋ ๋ํ์ด ๊ธฐ๋ฅ์ ๊ด์ฌ์ ํ๋ช ํ์ต๋๋ค.
์๊ฐ? ์ค๋ ๋๋ฅผ ์ฝ์ด ๋ณด๋ฉด ์ด๋ฏธ ์ต์ข ๋จ๊ณ์ ๊ฐ๊น์์ก์ต๋๋ค. ์ ์์ ์๊ฐ์ด ๊ถ๊ธํฉ๋๋ค.
https://github.com/bramtayl/DotOverloading.jl ์์ ์ ํ ์์ ์ ์ธ ์ ํ์ ๋งคํฌ๋ก๋ก ๊ตฌํ๋์์ต๋๋ค
@bramtayl , ๋๋ a.b
ํํ์ ์์ @overload_dots
๋ฅผ ๋ฃ์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๋งคํฌ๋ก๋ฅผ๋ฒ ์ด์ค์ ์ถ๊ฐ ํ ๊ฒ์ ์ ์ํ์ง ์์์ต๋๋ค. ๋๋ ๋งคํฌ๋ก๊ฐ ์ฌ์ฉํ๋ ์ ๋ต์ ํ์์ ๊ตฌ์ธ ๊ฒ์ ์ ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ฒด ํ์ผ์์ ์คํ๋๊ฑฐ๋ IDE๋ก ํดํน ๋ ์์๋ ๋งคํฌ๋ก์ ๋๋ค.
์ฆ ์๋ฐ a.b
์ผ๋ก ํด์๋๊ณ Expr(:., :a, :(Val{:b}())
์๋ก ์ ํ get_field_overloadable(a, Val{:b}())
@bramtayl , ์ ์ Jeff์
getfield ์ค๋ฒ๋ก๋ฉ์ ํ ๊ฐ์ง ๋ฌธ์ ์ ์ ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ด๋ถ์ ๋ํ ์ ์ ํ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์ํ๋ ๊ฒ์ ๋ด ์ฝ๋๋ฅผ ์คํํ๊ณ ๋ด์ผ ๋ณด๊ณ ์๋ฅผ ์์ฑํ ์ ์๋๋ก ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์์ ํ๋ ๊ฒ๋ฟ ์ผ ๋, ํนํ ๋ด ์์กด์ฑ์ 3 ๋จ๊ณ ๊น์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฝ๋๋ฅผ ํธ์ง ํ ์์๋ ๊ฒ์ ๊ธฐ๋ํ์ง ์์ต๋๋ค. ํฉ๋ฆฌ์ ์ด๊ณ ๋น ๋ฅธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ํฌ์ธํธ์ ์ง์ ์ก์ธ์คํฉ๋๋ค. ์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ด ํ ์์๋ ๊ฒ์ฒ๋ผ ๋๋ผ๊ณ ์ถ์ต๋๋ค.
๋ ๋ฒ์งธ ์์ ์ getfield ๋ฐ setfield๋ฅผ ์ฌ์ฉํ ๋ ๊ฑฐ๋ํ ํจ์ ๋ฉ์ปค๋์ฆ ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ง์ ์ก์ธ์คํ๋ค๋ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋๋ฅผ ์ํ๋ค๋ ๊ฒ์
๋๋ค. ๊ฒ๋ค๊ฐ struct
ํค์๋๋ ์ ํ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋์ด C๋ฅผ ์๊ธฐ์์ผ ์ฃผ๋ฉฐ getfield ์ก์ธ์ค๊ฐ ์ง์ ์ ์ด์ด์ผํ๋ค๋ ๊ธฐ๋๊ฐ์ ์ ๊ณตํฉ๋๋ค.
๋ฐ๋ผ์ $
์ฐ์ฐ์๋ฅผ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ getfield ์์์ฒ๋ผ ์ง์ ์ก์ธ์ค ํ ๊ฒ์ด๋ผ๋ ๊ธฐ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ํฉ๋ฆฌ์ ์ธ ํํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฏธ ๋ค๋ฅธ ์ปจํ
์คํธ์์๋ ํน์ ๋ฌธ์์ด๋ฏ๋ก ๊ทธ๋ฆฌ ๋๋์ง ์์ต๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํ๋ฉด ์ฌ์ฉํ๋ ์ฌ๋์ด ์ ๊ณ ๋ ์ด์ ํจ์๊ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ํ๊ธฐํ๊ธฐ ์ฌ์ฐ ๋ฉฐ R์์๋ ๋น์ทํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
getfield ์ค๋ฒ๋ก๋ฉ์ ํ ๊ฐ์ง ๋ฌธ์ ์ ์ ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ด๋ถ์ ๋ํ ์ ์ ํ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
์์ @JeffBezanson ๊ตฌํ์ getfield
(๋๋ setfield
)๋ฅผ ์ค๋ฒ๋ก๋ํ์ง ์์ต๋๋ค.
๋๋ ๋ํ ์ด๊ฒ์ 1.0์ผ๋ก ๋ง๋ค ๊ฒ์ ๊ฐ์ฒญํ๊ณ ์ถ์ต๋๋ค. ๋๋ ์ข ์ข ๋ด ์ฝ๋๋ฅผ ๋ค์ ์ ์ฐํ๊ฒ ์ ์งํ๊ธฐ ์ํด getter / settings๋ฅผ ์์ฑํ๋ ๊ฒ (๊ทธ๋ฆฌ๊ณ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ถ๊ธํด ํจ)๊ณผ ๋ด ์ฝ๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ๋ ์ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋๋ก "ํ์ฉ / ์ฅ๋ ค"ํ๋ ๊ฒ ์ฌ์ด์์ ๊ฐ๋ฑ์ ๋๋๋ค.
๋ง์ ๊ฒํฐ์ ์ธํฐ๋ฅผ ๋ฐฉ์ด ์ ์ผ๋ก ์์ฑํ๋ ๊ฒ์ ๋์๊ฒ ์ค๋ฆฌ์์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ๊ฒฐ๊ตญ Julia๋ ๊ฐ์ธ / ๋ณดํธ ํ๋๊ฐ ์์ผ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ํ๋์ ์ง์ ์ก์ธ์คํ๋๋ก ๊ถ์ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ํจํค์ง์ ๋ง์ ์ถฉ๋์ ์ผ์ผํค์ง ์๊ณ ๋ง์ getter / setter ํจ์์ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง๋ฌธ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ getfield
๋ฐ setfield!
(๋๋ ์ด์ ์ ์ฌํ)์ ๋ํ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๋์์ผ๋ก Val{:fieldname}
์ ๋์ ๋ฐ์ก๋๋ ๊ฒ๋ ์ฌ์ฉ์ ์นํ์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค.
๋ฐ๋ฉด์ ์ง์ ํ๋ ์ก์ธ์ค๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ๊ทธ๋ ๊ฒฝ์ฐ ํนํ ์ฅ์ ์ฝ๋์ ๊ฒฝ์ฐ ๊ถ์ฅ๋์ง ์์์ผํฉ๋๋ค. @JeffBezanson ์ ๊ตฌํ์์ด ๋๋ ๋ง์์ ์์ฃผ ๊น๋ํ ๋ฐฉ๋ฒ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ง์, @davidanthoff. getfield
์ค๋ฒ๋ก๋ฉ๊ณผ .
ํ๋ ์ก์ธ์ค ๊ตฌ๋ฌธ์ ์ค๋ฒ๋ก๋ฉ์ ํฉ์ณ์ผํฉ๋๋ค. ํ๋ ์ก์ธ์ค ๊ตฌ๋ฌธ์ ๊ณผ๋ถํ๋ฅผ ์๋ฏธํ์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก 1.x ๋ฆด๋ฆฌ์ค์ ์ถ๊ฐ ํ ์ ์์ง๋ง 1.0์์๋ ๋ฐ์ํ์ง ์์ต๋๋ค. ์์ฑ ๋ ๋์์ธ์ด๋ ๊ตฌํํ ์๊ฐ์ด ์์ต๋๋ค.
(C-) ๊ตฌ์กฐ์ฒด์ ๋ํ ํฌ์ธํฐ์ ๋ํธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค.
๋ด๊ฐ ์ ํธํ๋ ๊ตฌ๋ฌธ์ ํฌ์ธํฐ๋ฅผ ์ด๋ ๋ฐ ๋ณํํ๋ ๋ฐ๋ง ์ ์ ์ฌ์ฉํ๊ณ deref๋ฅผ ์ํด []๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ somepair a :: Int b :: Int end, p :: Ptr {somepair}๋ฅผ ๊ตฌ์ฑํ๋ฉด pa๋ a ํ๋์ ๋ํ ํฌ์ธํฐ์ด๊ณ pa [] = 3์ผ๋ก ์ฐ๊ฑฐ๋ x =๋ก ์ฝ์ต๋๋ค. ์๋น [].
๋ค์์ผ๋ก ์ฐ๋ฆฌ๋ ํ์ ์ ํฌ์๋ ์ ์ธ๊ณผ 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์ ๋ฐํ์ lib์ ์ ํ์ ๋ด๋ณด๋ผ ์ ์์ผ๋ฉฐ pointer_from_objref๋ ์ค์ ๋ก ๋ ํธ๋ฆฌํ ์ธํธ๋ก ์คํ ์ ์ ์ํด ๋ฉ์ง ์ ํ์ ํฌ์ธํฐ๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๋ค.
๋์ผํ ์คํ์ ์ ๊ฐ์ง ๋ ๊ฐ์ ํ๋๋ฅผ ๊ฐ๋ ๊ฒ๋ง์ผ๋ก๋ ์กฐํฉ์ด ์๋์ผ๋ก ์๋ํด์ผํ๋ค๋ ๋๋์ด ๋ญ๋๋ค.
@chethega ๋๋ ๋น์ ์ด C์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ ์ฑํ์ ๋๋ฌ์ผ ๋ฌธ์ ์์ด ๋๋ต ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ https://github.com/JuliaLang/julia/pull/21912๋ฅผ ์ฐพ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค (์ ํ ์คํ ์๋ฐ, -๊ทธ ์ธ์ด์์ ๊ฐ๋ฅํ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ ํํ๋ ๊ฒฝ๊ณ ์ก์ธ์ค, ๋ด๋ถ ํฌ์ธํฐ์ ์จ๋ฆฌ์ด์ฑ ๋ฑ).
์ง์์ ์ธ ์ ํ๊ฐ ์ด๊ฒ์ ๋ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊น์?
์ด์ ํ๋ฅผ 1.0์ผ๋ก ๋ณ๊ฒฝํ์ญ์์ค! :)
@ Liso77 ๋ฌด์จ ๋ง์ด์ผ? ๋ซ์ ๋ ์ํ์ ํ์๋๋๋ก ์ด๋ฏธ git master์ ๊ตฌํ๋์ด ์์ต๋๋ค.
@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 ๊ธฐ๋ฅ์ด ๋๊ฒฐ๋๊ธฐ ์ ์ ์ด์จ๋ ๋ณํฉ๋์์ต๋๋ค. ๋ช ํ์ฑ์ ์ํด ์ด์ ํ๋ฅผ ์ ๊ฑฐํ์ง๋ง์ด ์์ ์์ master์ ๋ณํฉ ๋ ๋ชจ๋ ํญ๋ชฉ์ 1.0์ด๋ฉ๋๋ค.
์ค๋ช ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ ๋๋ค! NEWS ํ์ผ๋ ํนํ ๊นจ๋ฌ์์ต๋๋ค.
์ ๊ฑฐํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! 1.0์ ๋์ฌ ๊ฒ์ด ๋๋ฌด ๊ธฐ์ฉ๋๋ค! :)
์๋ฅผ ๋ค์ด fieldnames
? ์ค๋ฒ๋ก๋๋ฅผ ํ์ฉํ์ฌ ์๋ ์์ฑ์์ ์ด๋ฌํ ์๋ก์ด "๋์ ์ผ๋ก ์ ์ ๋ ํ๋"๋ฅผ ์ง์ํ๋ ๋ฐฉ๋ฒ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ด๊ฒ์ ๋ง์ ์ด ๋ฐ / ๋๋ ๊ธด ์ด ์ด๋ฆ์ด์๋ DataFrame
s (์์ผ๋ก df.column_name
๋ฅผ ์ง์ํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ )๋ฅผ ๋ค๋ฃฐ ๋์ ๊ฐ์ด ๋ํ์ ์ฌ์ฉ์ ์ํด ๋งค์ฐ ๊ฐ๋ ฅ ํ ์ ์์ต๋๋ค.
๋๋ ํ์ฌ REPL (ํญ ํ์ฅ), 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 ๋ง์ต๋๋ค-ํ์ง๋ง ํ์ฌ ๊ทธ๋ ๊ฒํ๋ ๊ฒ์ด "์์ "ํฉ๋๊น? fieldnames
์ ์์กดํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์์ ํ์ง ์์ ๊ฒฝ์ฐ complete_fieldnames(x) = fieldnames(x)
๋ฅผ ์ ์ํ๊ณ REPL ์์ฑ์ complete_fieldnames
๋ฅผ ์ฌ์ฉํ๊ณ ์ฌ์ฉ์ ์ง์ ์์ฑ์ ๋ํด ์ค๋ฒ๋ก๋ ํ ์ ์์ต๋๋ค.
์, ์ด๊ฒ์ด ์ ๊ฐ ์ด๊ฒ์ ์ ๊ธฐ ํ ์ด์ ์ ๋๋ค. Base์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝ / ์ถ๊ฐํด์ผ ํ ๊ฒฝ์ฐ REPL๊ณผ ์น๊ตฌ๋ค์ด ๋์ค์ ํ์ฉํ ์ ์์ต๋๋ค. 0.7 ๊ธฐ๋ฅ ๋๊ฒฐ ๊ด์ ์์ ...
์ด๊ฒ์ด ์ ๊ฐ getproperty
ํจ์๋ฅผ ํธ์ถํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค. fieldnames
์ ๊ฐ์ ๊ฒ์ ์ฐธ์กฐํ์ง ์๋๋ค๋ ๊ฒ์ ๋ช
ํํํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค. fieldnames
๋ฐฉํดํ๋ฉด ํ์คํ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ ํจํ ์์ฑ ๊ฐ์ ์ ๊ณตํ๊ธฐ ์ํด ํด๋น propertynames
๊ฐ ํ์ํ ์ ์์ต๋๋ค. ๋ฌผ๋ก , ๊ทธ๊ฒ์ ์ ์ ์ ๋ ๊ฐ๋
์ด ์๋ ์ ์์ผ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์์ฑ์ ์ํด ๋ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์ํ ๊ฒ์
๋๋ค.
์ ๋ฌธ๊ฐ์ ์๊ฒฌ๊ณผ ์ฌ์ธต ๋ถ์์ด ํ์ํ ์ ์๋ค๋ ๋๋์ด ๋ค์์ต๋๋ค (๊ฐ์ฌํฉ๋๋ค!).์ด ๋ฌธ์ ์ ๋ํด ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ด์ด์ผํฉ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๋ํ ์ฌ๋ฏธ์๋ 3 ์ค ๊ตฌํ์ด ์์ต๋๋ค.
๋ด ์๊ฐ์ด๋ค
a.b
์ค์ ๋ก ํ๋ก์ ์ ํจ์๋ฅผ ํธ์ถํ๋คField{:b}()
๋์getfield
์ด ๊ฐ์ ๊ธฐ๋ฅ์ ์ป์ ๊ทธ๋์,x->x.a
๋ฌด๋ฃ ์ด๋ฏธ ์์ต๋๋ค. ๋ํgetfield
๋ ํญ์ ๋ฎ์ ์์ค์ ํ๋ ์ก์ธ์ค๋ฅผ ์๋ฏธํฉ๋๋ค.์์ ๊ตฌํ์ ์์ ํ ์๋ํ์ง๋ง ์ปดํ์ผ๋ฌ์์๋ ์๋นํ ์ด๋ ต์ต๋๋ค (sysimg + 5 %, ์ ๋ง ์ฆ๊ฑฐ์ด ๋๋ผ์์ ๋๋ค). ๋ฐ๋ผ์ ์ด๊ฒ์ ๋ช ๊ฐ์ง ์ ๋ฌธํ ํด๋ฆฌ์คํฑ์ด ํ์ํ๊ณ ์ด๊ธฐ ์ต์ ํ๊ฐ ์ ๋ฐ์ดํธ๋์ด์ผํ์ง๋ง ๊ทธ๋ ๊ฒ๋๋ฉด ์คํ ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.