her şey Pos
bir Ordered[Pos]
olarak kabul edilecektir, ayırma olur. Atama gerçekleşmesi gerektiğinde birkaç durum vardır, bkz. http://docs.scala-lang.org/overviews/core/value-classes.html#when_allocation_is_necessary. <
çağırma olarak basit bir şey yaparken
Yani, tahsisleri alacak:
val x = Pos(1)
val y = Pos(2)
x < y // x & y promoted to an actual instance (allocation)
ilgili kurallar (yukarıdaki makaleden alıntı) vardır:
bir değer sınıfı tedavi edilir zaman evrensel özellik dahil olmak üzere başka bir tür olarak, gerçek değer sınıfının bir örneğidir örneği ve gereken: bir değer sınıfı, tip değişken olarak kullanıldığı zaman, bu kuralın başka örneğidir. Yukarıdaki kod parçacığını Disassembling
bu doğruluyor:
0: aload_0
1: iconst_1
2: invokevirtual #21 // Method Pos:(I)I
5: istore_1
6: aload_0
7: iconst_2
8: invokevirtual #21 // Method Pos:(I)I
11: istore_2
12: new #23 // class test/Position$Pos
15: dup
16: iload_1
17: invokespecial #26 // Method test/Position$Pos."<init>":(I)V
20: new #23 // class test/Position$Pos
23: dup
24: iload_2
25: invokespecial #26 // Method test/Position$Pos."<init>":(I)V
28: invokeinterface #32, 2 // InterfaceMethod scala/math/Ordered.$less:(Ljava/lang/Object;)Z
biz sınıfta
Position$Pos
için "yeni" işlem kodu iki örneğini
GÜNCELLEME var görülebilir
: önlemek için el (bile onlar sadece ileriye Originlal uygulanmasına) her yöntemi geçersiz kılabilirsiniz böyle simpleks durumlarda tahsisi:
Örneğin tarafından
x < y
yaparken
Butahsisi kaldıracaktır. Ancak, bu durum hala Pos
'un Ordered[Pos]
(Ordered[Pos]
veya bir Ordered[T]
türünde T türünde bir parametre olarak alınmış bir yönteme geçtiğinde) olarak ele alındığında durumları bırakır. Bu özel durumda, hala bir tahsis olacak ve bunun etrafında hiçbir yolu yoktur.
Sen tahsisini önlemek bir Pos karşılaştırılabilir hale getirmek için herhangi bir yol biliyor? – peri4n
Lütfen güncellememi kontrol edin. –
Çok teşekkür ederim – peri4n