Ruby class yapısı hakkında

Öncelikle herkese iyi forumlar.
Codewars sitesinde ruby dilinde örnekler çözerken bir soruda takılı kaldım.
Link
Linkdeki şu kısım hariç hepsini çözdüm.

Test.assert_equals(array, [1, 2, 3, 4, 5], 'The original array must not be changed')

Şimdiden teşekkürler.

square metodunu nasıl yazdınız, array'i değiştiriyorsunuz galiba, Ruby’de array nasıl kopyalanıyorsa (.clone olabilir mi) belki öyle kopyaladıktan sonra işleminizi yapabilirsiniz, veya self.map { |n| n * n } de kopya döndürüyor gibi.

1 Beğeni

Teşekkür ederim ama bir fonksiyon hariç hepsini yazabildim birtek bunu yazamadım.

Test.assert_equals(array, [1, 2, 3, 4, 5], 'The original array must not be changed')

Evet.

Aslında orada bir fonksiyon direkt test edilmiyor, sizin yazdığınız diğer metodların kendilerine paslanan array’i değiştirmemesi gerekliliği test ediliyor. Yani square, cube ve diğerlerinin içine yazdıklarınız array’in kendisini değiştirmemeli.

Yani şunu istiyorlar anladığım kadarıyla

"array" [1, 2, 3] olarak başladı
array.square() çağrıldı
"array" hâla [1, 2, 3] olmalı bu satırda, [1, 4, 9] değil

Mesela Python’da

def square(liste):
    for j, _ in enumerate(liste):
        liste[j] **= 2
    return liste

>>> liste = [1, 2, 3]
>>> square(liste)
[1, 4, 9]
>>> liste
[1, 4, 9]

Bu versiyon listenin kendisini değiştiriyor.

Buna karşılık

def kare(liste):
    # Ruby'deki .clone gibi galiba
    liste_kopya = liste[:]
    for j, _ in enumerate(liste_kopya):
        liste_kopya[j] **= 2
    return liste_kopya

veya

def kare(liste):
    # Ruby'deki .map gibi galiba
    return [eleman ** 2 for eleman in liste]

listeyi değiştirmiyorlar:

>>> liste = [8, 9, 0]
>>> kare(liste)
[64, 81, 0]
>>> liste
[8, 9, 0]
1 Beğeni

Kısaca sadece bilemediğim sadece bu kodu nasıl yazabilirim python’da ?

list = [1,2,3,4]
list

Output
[1,2,3,4] olucak

Bunu yazmamın bir yolu varmı ?

Tam anlayamadım, şunun gibi bir şey mi?

def f(liste):
    return liste
class Array():
	def __init__(self,a)
		self.a = a 


a = Array(a=10)

#İstediğim burda
a
# 10 yazdırılması

__repr__ ile olabilir:

class Array:
    def __init__(self, a):
        self.a = a
    def __repr__(self):
        return str(self.a)
>>> a = Array(10)
>>> a
10

Teşekkür ederim Ruby’de __repr__ yerine kullanılıcak şeyi buldum.