Option
मोनैड स्केल में कुछ या कुछ भी चीज़ों से निपटने का एक शानदार अभिव्यक्तिपूर्ण तरीका है। लेकिन अगर "कुछ भी नहीं" होने पर किसी को संदेश लॉग करने की आवश्यकता होती है तो क्या होगा? स्काला API दस्तावेज़ के अनुसार,स्कैला कोड
या तो प्रकार अक्सर scala.Option के लिए एक विकल्प जहां वाम विफलता का प्रतिनिधित्व करता है (प्रथा के अनुसार) और सही कुछ के लिए समान है के रूप में प्रयोग किया जाता है।
हालांकि, मुझे असफल प्रसंस्करण के लिए या तो या तो अच्छे या वास्तविक वास्तविक दुनिया के उदाहरणों का उपयोग करके सर्वोत्तम प्रथाओं को खोजने का कोई भाग्य नहीं था।
def logs: Array[String] = {
def props: Option[Map[String, Any]] = configAdmin.map{ ca =>
val config = ca.getConfiguration(PID, null)
config.properties getOrElse immutable.Map.empty
}
def checkType(any: Any): Option[Array[String]] = any match {
case a: Array[String] => Some(a)
case _ => None
}
def lookup: Either[(Symbol, String), Array[String]] =
for {val properties <- props.toRight('warning -> "ConfigurationAdmin service not bound").right
val logsParam <- properties.get("logs").toRight('debug -> "'logs' not defined in the configuration").right
val array <- checkType(logsParam).toRight('warning -> "unknown type of 'logs' confguration parameter").right}
yield array
lookup.fold(failure => { failure match {
case ('warning, msg) => log(LogService.WARNING, msg)
case ('debug, msg) => log(LogService.DEBUG, msg)
case _ =>
}; new Array[String](0) }, success => success)
}
(कृपया ध्यान दें यह एक वास्तविक परियोजना से एक टुकड़ा है, इसलिए यह अपने आप ही संकलन नहीं होगा)
मैं था: अंत में मैं अपने ही परियोजना के लिए निम्न कोड के साथ आए हैं यह जानने के लिए आभारी रहें कि आप अपने कोड में Either
का उपयोग कैसे कर रहे हैं और/या उपर्युक्त कोड को पुन: सक्रिय करने के बेहतर विचारों का उपयोग कर रहे हैं।
मैं का कोई जिक्र नहीं मिल सकता है ओडर्सकी की किताब में जो भी हो, वह भी। – skaffman
हां, मेरे पास "स्कैला में प्रोग्रामिंग" है और इसमें कोई भी उल्लेख नहीं मिला। सबसे अच्छा सादृश्य मुझे पता है कि लिफ्टवेब में बॉक्स है जिसका उपयोग विफलताओं को ले जाने के उद्देश्य से भी किया जाता है - यह विकल्प की तरह है, लेकिन अतिरिक्त कार्यक्षमता के साथ। –
'विकल्प [या तो [फू, बार]]' के लिए कोई बेहतर विकल्प? – Jus12