Saya telah menemukan sepotong kode Haskell yang terlihat seperti ini:
ps@(p:pt)
Apa arti @
simbol dalam konteks ini? Sepertinya saya tidak dapat menemukan info di Google (sayangnya sulit untuk mencari simbol di Google), dan saya tidak dapat menemukan fungsinya di dokumentasi Prelude, jadi saya membayangkan itu pasti semacam gula sintaksis sebagai gantinya.
@
pada halaman itu menjelaskannya.Jawaban:
Ya, itu hanya gula sintaksis, dengan
@
membaca keras-keras sebagai "sebagai".ps@(p:pt)
memberi Anda nama untukps
p
pt
Tanpa
@
, Anda harus memilih antara (1) atau (2) :( 3).Sintaks ini sebenarnya berfungsi untuk konstruktor apa pun; jika sudah
data Tree a = Tree a [Tree a]
, makat@(Tree _ kids)
memberi Anda akses ke pohon dan anak-anaknya.sumber
The
@
Symbol digunakan untuk kedua memberi nama untuk parameter dan sesuai dengan yang parameter terhadap pola yang mengikuti@
. Ini tidak spesifik untuk daftar dan juga dapat digunakan dengan struktur data lainnya.Ini berguna jika Anda ingin "mendekomposisi" suatu parameter menjadi bagian-bagiannya sementara masih membutuhkan parameter secara keseluruhan di suatu tempat di fungsi Anda. Salah satu contoh di mana hal ini terjadi adalah
tails
fungsi dari pustaka standar:sumber
Saya ingin menambahkan yang
@
berfungsi di semua tingkatan, artinya Anda dapat melakukan ini:Yang kemudian akan menghasilkan ini:
((Just 1, Just 2), Just 1, 1, 2)
Jadi pada dasarnya ini adalah cara bagi Anda untuk mengikat suatu pola ke suatu nilai. Ini juga berarti bahwa ia bekerja dengan segala jenis pola, bukan hanya daftar, seperti yang ditunjukkan di atas. Ini adalah hal yang sangat berguna untuk diketahui, karena itu berarti Anda dapat menggunakannya dalam lebih banyak kasus.
Dalam hal ini,
a
adalah keseluruhanMaybe Tuple
,b
hanya yang pertamaJust
dalam tupel, danc
dand
adalah nilai yang terkandung diJust
dalam tupel pertama dan keduasumber
Untuk menambah apa yang dikatakan orang lain, mereka disebut sebagai-pola (dalam ML sintaks menggunakan kata kunci "sebagai"), dan dijelaskan di bagian Laporan Haskell tentang pola .
sumber