2012-11-09 10 views
5

में उपयोग के लिए स्कैला में समझ के लिए एक मान (यदि एक में) परिभाषित कर सकते हैं क्या उपज में उपयोग के लिए स्कैला में समझ के लिए एक मूल्य (यदि एक में) परिभाषित करना संभव है।क्या आप उपज

मैं दो बार संभावित महंगे मूल्यांकन से बचने के लिए ऐसा करना चाहता हूं।

उदाहरण के लिए एक उदाहरण।

for { 
bar <- bars if expensive(bar) > 5 
} yield (bar, expensive(bar)) 

उत्तर

7

कैसे इस बारे में:

for { 
bar <- bars 
exp = expensive(bar) 
if exp > 5 
} yield (bar, exp) 
+0

यह केवल काम करता है और यदि 'महंगा (बार)' प्रकार सम्मान के इंटरफ़ेस-समझ के लिए (नक्शा, flatMap, फिल्टर, फ़िल्टर के साथ आदि)। प्रश्न के लेखक ने सुझाव नहीं दिया कि यह करता है। और यदि ऐसा होता है, तो यह लेखक द्वारा प्रदान किए गए कोड से अलग परिणाम देगा। – pedrofurla

+1

@pedrofurla ठीक है। महंगा() संग्रह वापस नहीं कर सकता है। तो "<-" से "=" – Don

+0

एचएम बदलें ... पता नहीं था कि आप वहां 'वैल' को छोड़ सकते हैं। अच्छा लगा। फिर भी, '<-' और '=' का पूरी तरह से अलग अर्थ हैं, भले ही यह संग्रह लौटाए। बीटीडब्ल्यू, संग्रह आवश्यक नहीं है, केवल 'तर्कसंगत monadic' इंटरफ़ेस। – pedrofurla

4

हाँ, आप कर सकते हैं:

scala> List(1,2,3,4,5) 
res0: List[Int] = List(1, 2, 3, 4, 5) 

scala> for(n <- res0; val b = n % 2; if b==1) yield b 
res2: List[Int] = List(1, 1, 1) 
संबंधित मुद्दे