Swift'deki global işlevlerle özyineleme önemsizdir. Örneğin, bir kapanma kendisine atıfta bulunamaz. Bununla birlikte, bir kapanma kendisine atıfta bulunamaz. Örneğin:Swift'de nasıl bir _inline_ özyinelemeli kapatma oluşturabilirim?
Variable used within its own initial value
bir çözüm bu var mı:
var f: (Void -> Void) =
{
f()
}
şu hatayı verir? satır içi özyinelemeli bir kapatma nasıl oluşturabilirim?
func unimplemented<T>() -> T
{
fatalError()
}
func recursive<T, U>(f: (@escaping (((T) -> U), T) -> U)) -> ((T) -> U)
{
var g: ((T) -> U) = { _ in unimplemented() }
g = { f(g, $0) }
return g
}
recursive
((T) -> U)
kapağın bir versiyonun bir başvurudur bir kapak (((T) -> U), T) -> U
alır ve kullanışlı bir fonksiyonu g
döner bir fonksiyonudur:
Bu nasıl yukarıda Kirsteins' cevabını daha iyi değilsiniz? Daha fazla boilerplate eklediniz ve yinelemeli fonksiyonunuzun '(T -> U)' şeklinde olduğunu varsayıyorsunuz (yani, eğer durum böyle değilse, tip sistemiyle akrobasi yapmak zorundasınız). İdeal bir çözüm olmasa da, örtük olarak isteğe bağlı olan bu dil için isteğe bağlı isteğe bağlı diller tanıtıldı. –
@SashaChedygov: Zaman damgalarına bakarsanız, bunun sorunun ilk cevabı olduğunu görebilirsiniz. Amacım, bilgimi bir Q/A biçiminde paylaşmaktı. –
Yeterince adil, zaman damgalarını yanlış okuyorum. –