Julia Enum veri türünü bildirmenin tek yolu @enum
kullanıyor mu? Öyleyse neden?Enum veri türünü Julia-Lang'de bildirmenin farklı yolları
cevap
Tek (kolay) yol, evet. Cevap Julia, sık sık (ya da daha doğrusu, her zaman), source code bakarak bulunabilir. İlk başta biraz korkutucu olabilir, ama bir süre sonra buna alışırsınız!
Normalde, belirli bir türde bir nesne oluşturmak için, yazıcının yapıcısını çağırırsınız. Yani
Enum(...)
yapmak ve türüne
Enum
bir nesne oluşturmak mümkün olması beklenebilir.
Bu durumda, Enum
, türünde türünde olduğundan, bunu yapamazsınız.
@enum
ne yapar? manual örnek Bu aslında tamamen yeni bir tür yaratır
julia> @enum FRUIT apple=1 orange=2 kiwi=3
, FRUIT
denilen, yani Enum
bir alt tipi olan ve bu dönüştürülür, apple
orange
ve kiwi
denen tipte nesneler Int(apple)
numaralı telefonu arayarak numaralar. Bu, bunu yapmak için Julia kodunun oluşturulmasıyla yapılır.
Prensip olarak, makronun yaptığı tüm işleri yapabilirdiniz, ancak makro hayatımızı kolaylaştırmak için var!
... ve daha sonra bunu yapmanın kötüye kullanımı vardır; Sembollerin kullanımı sadece yansıma güzel bit ve tamamen gereksiz olduğunu
typealias Sunday Val{:Sunday}
typealias Monday Val{:Monday}
typealias Tuesday Val{:Tuesday}
typealias Wednesday Val{:Wednesday}
typealias Thursday Val{:Thursday}
typealias Friday Val{:Friday}
typealias Saturday Val{:Saturday}
typealias Days Union{
Type{Sunday},
Type{Monday},
Type{Tuesday},
Type{Wednesday},
Type{Thursday},
Type{Friday},
Type{Saturday}
}
function daynumber(d::Days)
if d == Sunday return 0
elseif d == Monday return 1
elseif d == Tuesday return 2
elseif d == Wednesday return 3
elseif d == Thursday return 4
elseif d == Friday return 5
elseif d == Wednesday return 6
end
-1
end
> daynumber(Friday)
5
> daynumber(:Friday)
> MethodError:`daynumber` has no method matching (::Symbol)
Not: setleri için adları gibi türleri düşünürken ben tökezledi. Orada bir şey koymak, sonra belgeler açıkça against bu önerir eminim tipi muayene
> x = Saturday.parameters[1]
:Saturday
> typeof(x)
Symbol
> eval(x) == Saturday
true
aracılığıyla kurtarabilirsiniz. Yine de @code_warntype bu yapıya özellikle uymuyor.
Belirlenen kuramsal terimlerle, her gün diğer adı bir tek tiptir ve dolayısıyla tam olarak bir öğe kümesi için bir addır. "Tip" in "Birlik" i, daha sonra sayılan sonlu küme türünü oluşturan tek eleman kümelerinin ayarlanmış teorik birliğidir.
abstract Fruits{N} <: Enum
immutable Apples <: Fruits{1} end
immutable Oranges <: Fruits{2} end
immutable Bananas <: Fruits{3} end
fruitsalad{N}(x::Fruits{N}) = N
> anorange = Oranges()
> fruitsalad(anorange)
2
numaralandırma
yapmanın ... ve henüz daha tip bozma yolu Yine @code_warntype tüm bu akla görünmüyor. Nihayet bu son örnekte numaralandırmaimmutable Fruits{N} <: Enum
apples::Fruits
bananas::Fruits
oranges::Fruits
function Base.call(::Type{Fruits})
new{"anything"}(
Fruits{"crunchy"}(),
Fruits{"mushy"}(),
Fruits{"tangy"}()
)
end
function Base.call{N}(::Type{Fruits{N}})
if N != "crunchy" && N != "mushy" && N != "tangy"
error("Invalid enumeration parameter")
end
new{N}()
end
end
fruitsalad{N}(x::Fruits{N}) = N
> fruitsalad(Fruits().apples)
"crunchy"
için korumalı bir ad sağlar son bir tekniktir öncelikle genel meyveler türü örneğini zorunda belirli meyve örneğini verir kolaylık özelliğine erişmek için. Nesne yönelimli tasarımın ifadesinde Julia, türlerin statik özelliklerine sahip değildir.Türlerin özellikleri, yalnızca bu türün açık bir örneği oluşturulduktan sonra kullanılabilir. Düşünce, belirli bir tipte statik olarak mevcut olan herhangi bir şeyin, bir yöntem aşırı yüklenmesinde temsil edilmesi gerektiğidir.
- 1. Temel/türetilmiş enum türünü al?
- 2. PowerShell eşleşen enum türünü kullanamaz mı?
- 3. Enum kullanarak sınıf türünü nasıl çözülür
- 4. Perl'de bir enum türünü nasıl oluşturabilirim?
- 5. İki farklı veri türünü veya sınıfını tutan bir vektör oluşturma
- 6. Oracle Veri Türünü Tanımla
- 7. Varlık Framework Veri Açıklaması Enum
- 8. Kütüphaneleri gcc/g ++ 'da belirtmenin farklı yolları
- 9. C# farklı yolları - (T) obj T
- 10. Android Tuval, farklı zoom ile birden yolları
- 11. Yalnızca dize içeren iç içe enum türünü alma?
- 12. * Herhangi bir * enum için bir açıklama özelliği bildirmenin bir yolu var mı? Şu anda
- 13. jQuery değişkenlerini bildirmenin resmi doğru yolu nedir?
- 14. Yolları
- 15. Yolları
- 16. Saniye olmadan MySQL'de Time veri türünü kullanma
- 17. Veri türünü C'deki bir değişkenden alabilir miyim?
- 18. Bir katmanın veri kaynağı türünü nasıl belirleyebilirim
- 19. C# 'daki MySQL'den veri türünü nasıl alabilirim?
- 20. Veri kaybı olmadan sütun türünü değiştir
- 21. Farklı bir veri türü
- 22. C - Girdi Girdi Türü Enum
- 23. Enum of Enum NULL
- 24. Python veri türünü keşfetmek için iyi yöntemler var mı?
- 25. Laravel 5.2: "Middlewares" i ilan etmenin biraz farklı yolları?
- 26. Android'de sistem düzeyinde değişiklik yapmanın farklı yolları nelerdir?
- 27. Oracle'ın string ifadeleri veri türünü nasıl belirlediği nedir?
- 28. Enum
- 29. Sütunlar veri türünü tamsayı ve geri veri koruyarak (postgres) dize arasında geçiş yapmak için 4 geçişi Geçiş
- 30. Varlık çerçevesi: farklı veri tabanları
Hangi dilde? Julia'da mı? Dokümanları oku ... – m02ph3u5