मैं स्कैला के लिए नया हूं और निरंतरता के आसपास अपने सिर को लपेटने की कोशिश कर रहा हूं मैं yield return
सी # कथन का पुनरुत्पादन करने की कोशिश कर रहा हूं।निरंतरता और समझ के लिए - असंगतता क्या है?
package com.company.scalatest
import scala.util.continuations._;
object GenTest {
val gen = new Generator[Int] {
def produce = {
yieldValue(1)
yieldValue(2)
yieldValue(3)
yieldValue(42)
}
}
// Does not compile :(
// val gen2 = new Generator[Int] {
// def produce = {
// var ints = List(1, 2, 3, 42);
//
// ints.foreach((theInt) => yieldValue(theInt));
// }
// }
// But this works?
val gen3 = new Generator[Int] {
def produce = {
var ints = List(1, 2, 3, 42);
var i = 0;
while (i < ints.length) {
yieldValue(ints(i));
i = i + 1;
}
}
}
def main(args: Array[String]): Unit = {
gen.foreach(println);
// gen2.foreach(println);
gen3.foreach(println);
}
}
abstract class Generator[E] {
var loopFn: (E => Unit) = null
def produce(): Unit @cps[Unit]
def foreach(f: => (E => Unit)): Unit = {
loopFn = f
reset[Unit, Unit](produce)
}
def yieldValue(value: E) =
shift { genK: (Unit => Unit) =>
loopFn(value)
genK(())
()
}
}
आप देख सकते हैं, gen2
बाहर टिप्पणी की है के रूप में यह संकलन नहीं करता है:
this post के बाद, मैं निम्नलिखित कोड लिखा है। चूंकि मैं थोड़ी देर लूप का उपयोग करके सूची की सामग्री पर आसानी से पुन: प्रयास कर सकता हूं (gen3
देखें), मुझे उम्मीद थी कि फोरैच लूप भी काम करेगा।
no type parameters for method foreach: (f: Int => B)Unit exist so that
it can be applied to arguments (Int => Unit @scala.util.continuations.cpsParam[Unit,Unit])
--- because ---
argument expression's type is not compatible with formal parameter type;
found : Int => Unit @scala.util.continuations.cpsParam[Unit,Unit]
required: Int => ?B
क्यों मैं इस त्रुटि मिलती है और वहाँ थोड़ी देर के पाश से क्लीनर कुछ के साथ इस को हल करने के लिए एक रास्ता है है:
संकलन त्रुटि पीछा कर रहा है?
आप
स्केल निरंतरता का उपयोग करके उपज (उपज वापसी) लागू करने के संभावित डुप्लिकेट] (http: // stackoverflow।कॉम/प्रश्न/2201882/कार्यान्वयन-उपज-उपज-वापसी-उपयोग-स्केल-निरंतरता) –
मुझे स्केल निरंतरता का उपयोग करके 'उपज रिटर्न' को पुन: उत्पन्न करने के लिए मुझे एक उत्तर की तलाश नहीं है। मैं इस कारण की तलाश में हूं कि मेरे उदाहरण में 'gen2' क्यों काम नहीं करता है। 'उपज वापसी' केवल वह संदर्भ है जिसमें मुझे इस मुद्दे का सामना करना पड़ा। – GuiSim
आह, क्षमा करें तो। –