fieldsকেবল একটি কাঠামোর "উপাদান"। কাঠামো
struct A
b
c::Int
end
ক্ষেত্র আছে bএবং c। getfieldক্ষেত্রের সাথে আবদ্ধ অবজেক্টটিকে ফেরত দেওয়ার জন্য একটি কল :
julia> a = A("foo", 3)
A("foo", 3)
julia> getfield(a, :b)
"foo"
জুলিয়ার প্রারম্ভিক সংস্করণগুলিতে সিন্ট্যাক্সটি a.b"নিম্ন" অর্থাত্ লিখন হিসাবে একই হত getfield(a, :b)। এখন পরিবর্তিত হয়েছে যে a.bকরতে পরিধেয় getproperty(a, :b)ডিফল্ট ফলব্যাক সঙ্গে
getproperty(a::Type, v::Symbol) = getfield(a, v)
সুতরাং ডিফল্ট হিসাবে, কিছুই পরিবর্তন করা হয়নি। তবে ডট-সিনট্যাক্সের অতিরিক্ত কার্যকারিতা সরবরাহ করতে স্ট্রাইকগুলির লেখকরা ওভারলোড করতে পারেন getproperty( ওভারলোড করা সম্ভব নয় getfield):
julia> function Base.getproperty(a::A, v::Symbol)
if v == :c
return getfield(a, :c) * 2
elseif v == :q
return "q"
else
return getfield(a, v)
end
end
julia> a.q
"q"
julia> getfield(a, :q)
ERROR: type A has no field q
julia> a.c
6
julia> getfield(a, :c)
3
julia> a.b
"foo"
সুতরাং আমরা ডট সিনট্যাক্সে অতিরিক্ত কার্যকারিতা যুক্ত করতে পারি (আমরা চাইলে গতিশীলভাবে)। এটি একটি কার্যকর উদাহরণ হিসাবে পাইক্যাল প্যাকেজ প্যাকেজটির জন্য এটি দরকারী যেখানে pyobject[:field] এটি লিখতে হবে যখন আপনি এটি লিখতে সক্ষম হবেন যেমন এটি প্রয়োগ করা সম্ভব হয়pyobject.field.
মধ্যে পার্থক্য setfield!এবং setproperty!এর মধ্যে পার্থক্য অনুরূপ getfieldএবং getproperty, উপরোক্ত ব্যাখ্যা।
এছাড়াও, Base.propertynamesআরএপিএলে বৈশিষ্ট্যগুলির ট্যাব সমাপ্তির জন্য ফাংশনটিতে আটকানো সম্ভব। ডিফল্টরূপে কেবলমাত্র ক্ষেত্রের নামগুলি প্রদর্শিত হবে:
julia> a.<TAB><TAB>
b c
তবে অতিরিক্ত লোডের মাধ্যমে propertynamesআমরা এটিকে অতিরিক্ত সম্পত্তিও প্রদর্শন করতে পারি q:
julia> Base.propertynames(::A) = (:b, :c, :q)
julia> a.<TAB><TAB>
b c q