SORU
19 ŞUBAT 2013, Salı


&Quot;modifiye" bir kitapta tek bir alan (bir kayıt, yalnızca bir alan değiştirme kopyalama) için kestirme bir yolu?

Hadi aşağıdaki kayıt ADT ki:

data Foo = Bar { a :: Integer, b :: String, c :: String }

Kaydı alır ve kaydeder (aynı türden) tüm alanlar ama tek bir bağımsız değişken olarak geçirilen aynı değerleri olduğu gibi: döndüren bir işlev istiyorum

walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) }

Yukarıda çalışıyor, ama daha çok alan bir kayıt (10) söylemek için, böyle bir işlevi oluşturmak oldukça gereksiz olduğunu düşündüğünüz yazarak çok gerektirecektir.

Aynı işi daha az sıkıcı bir yolu var mı?

CEVAP
19 ŞUBAT 2013, Salı


Evet, kayıt alanları güncelleştirmek için güzel bir yolu var. GHCi ... yapabilirsiniz

> data Foo = Foo { a :: Int, b :: Int, c :: String }  -- define a Foo
> let foo = Foo { a = 1, b = 2, c = "Hello" }         -- create a Foo
> let updateFoo x = x { c = "Goodbye" }               -- function to update Foos
> updateFoo foo                                       -- update the Foo
Foo {a = 1, b = 2, c = "Goodbye" }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Major FX

    Major FX

    6 HAZİRAN 2012
  • Tire Rack

    Tire Rack

    31 Mayıs 2007
  • Yanko Kral

    Yanko Kral

    8 HAZİRAN 2006