Nedir &; kaldırma " " Scala?
Dönem okudum Scala ekosistem makaleleri okuduğumda bazen"""". kaldırdı / kaldırma Ne yazık ki, bu tam olarak ne anlama geldiğini açıkladı. Biraz araştırma yaptım ve görünen o ki kaldırma şey ile işlevsel değerleri falan gibi, ama mümkün değildi bulmak için bir metin olduğunu açıklıyor kaldırma aslında ne olduğu hakkında bir acemi dostu.
Adı germe olan, Lift çerçeve boyunca ilave bir karışıklık var, ama bu soruya cevap yardımcı olmuyor.
""Scala? kaldırma ne
CEVAP
Birkaç kullanımları vardır:
PartialFunction
PartialFunction[A, B]
bir işlevi, etki alanı A
isDefinedAt
yöntem (belirtildiği gibi) bazı alt küme için tanımlanan bir hatırlayın. ""PartialFunction[A, B]
Function[A, Option[B]]
içine bir. bir asansör edebilirsiniz Yani, bir fonksiyon içinde tanımlanmıştüm13 ** tip Option[B]
olan
Bu yöntem kesin çağırma tarafından yapılır PartialFunction
lift
.
scala> val pf: PartialFunction[Int, Boolean] = { case i if i > 0 => i % 2 == 0}
pf: PartialFunction[Int,Boolean] = <function1>
scala> pf.lift
res1: Int => Option[Boolean] = <function1>
scala> res1(-1)
res2: Option[Boolean] = None
scala> res1(1)
res3: Option[Boolean] = Some(false)
Yöntemleri
""Bir işlev çağırma. bir yöntem kaldırabilir Bu denireta-genişleme(bunun için Ben James için teşekkürler). Örneğin:
scala> def times2(i: Int) = i * 2
times2: (i: Int)Int
Uygulayarak bir işlev bir yöntem kaldırıyoruzalt çizgi
scala> val f = times2 _
f: Int => Int = <function1>
scala> f(4)
res0: Int = 8
Yöntem ve fonksiyonlar arasındaki temel fark unutmayın. res0
örnekbir (örndeğer) (fonksiyon) türü (Int => Int)
Funktorlar
Birfunctor(olarak tanımlanmışscalazbazı "kap" (bu terimi kullanıyorumson derecegevşek), F
öyle ki, eğer biz bir F[A]
fonksiyon A => B
, sonra da alabiliriz elimizde bir F[B]
(düşünün, örneğin, F = List
map
yöntem)
Aşağıdaki gibi: bu özellik kodlama yapabiliriz
trait Functor[F[_]] {
def map[A, B](fa: F[A])(f: A => B): F[B]
}
Bu" işlevi A => B
eşleme alanına. "kaldırmak için güçlü olmak için dönmesidir. Yani:
def lift[F[_]: Functor, A, B](f: A => B): F[A] => F[B]
F
bir functor bir fonksiyonu varsa, A => B
, 33* *bir işlevi var. Deneyin ve lift
yöntemi uygulamak olabilir - çok basit kalıyor.
Transformers Monad
Gibihcoopzaşağıda (ve sadece bu kod gereksiz bir ton yazı beni kurtarabilecek fark ettim) diyor ki, "asansör" de bir anlamda . dönem ^strong>Transformers Monad. Monad bir transformatör bir şekilde "" birbiri (monadlar oluştur). monadlar istifleme olduğunu unutmayın
Yani, örneğin, IO[Stream[A]]
döndüren bir fonksiyon olduğunu varsayalım. Bu StreamT[IO, A]
trafo monad dönüştürülebilir. Şimdi "" başka bir değer de StreamT
o IO[B]
belki. bir asansör isteyebilirsiniz Bu yazabilirsiniz:
StreamT.fromStream(iob map (b => Stream(b)))
Ya da bu:
iob.liftM[StreamT]
bu bir soruyu akla getiriyor:neden StreamT[IO, B]
içine IO[B]
bir dönüştürmek istiyor muyum?. Cevabım şu olurdu "kompozisyon olanakları yararlanmak için". Hadi 43* *bir işlevi olduğunu varsayalım
lazy val f: (A, B) => C = ???
val cs =
for {
a <- as //as is a StreamT[IO, A]
b <- bs.liftM[StreamT] //bs was just an IO[B]
}
yield f(a, b)
cs.toStream //is a Stream[IO[C]], cs was a StreamT[IO, C]
Ondalık noktaları ile birlikte sayısal...
TÜM Java bayt imzalanmış olması geçici...
Tam olarak durdurulması, sorunun nedir...
İçin __init__.py nedir?...
XML ve ASMX web Hizmetleri arasındaki ...