मैं हमेशा जब एक ByteString पढ़ने का प्रयास निम्न त्रुटि प्राप्त:बाइटस्ट्रिंग को एक इंट में बदलने का सबसे अच्छा तरीका क्या है?
factSplice :: SnapletSplice App App
factSplice = do
mbstr <- getParam "input" -- returns user input as bytestring
let str = maybe (error "splice") show mbstr
let n = read str :: Int
return [X.TextNode $ T.pack $ show $ product [1..n]]
या शायद:
Prelude.read: no parse
यहाँ कोड का एक नमूना है कि एक ब्राउज़र में प्रतिपादन करते समय यह त्रुटि होने की कारण होगा है अधिक बस:
simple bs = read (show bs) :: Int
किसी कारण से, show bs
के बाद जिसके परिणामस्वरूप स्ट्रिंग, कोट भी शामिल है। इसलिए त्रुटि के चारों ओर जाने के लिए मुझे उद्धरण को read
हटा देना होगा। मैं निम्नलिखित समारोह इंटरनेट से नकल ऐसा करने के लिए उपयोग करें:
sq :: String -> String
sq [email protected][c] = s
sq ('"':s) | last s == '"' = init s
| otherwise = s
sq ('\'':s) | last s == '\'' = init s
| otherwise = s
sq s = s
फिर simple bs = read (sq.show bs) :: Int
काम करता है के रूप में उम्मीद।
- यह मामला क्यों है?
- बाइटस्ट्रिंग को इंट में बदलने का सबसे अच्छा तरीका क्या है?
मेरे लिए प्रश्न # 2 अभी भी स्पष्ट नहीं है - या यह केवल एक और विशिष्ट उपयोग मामला हो सकता है जिसके बारे में मैं उत्सुक हूं और मुझे लगता है कि इस प्रारंभिक प्रश्न से संबंधित है: क्या होगा अगर किसी प्रकार का " लंबाई क्षेत्र "जिसे लेंस 4 के बाइटस्ट्रिंग के रूप में पार्स किया गया है, जो वास्तव में एक इंट 32 का वर्णन करता है। क्या आपका प्रस्तावित कामकाज अभी भी मान्य है? एक अधिक आरामदायक समाधान के रूप में मैं एक पुस्तकालय की तलाश में था जो इस तरह के बाइटस्ट्रिंग ले सकता है और सही इंट वापस कर देगा। क्या कोई पुस्तकालय है जो इस उपयोग के मामले को संभाल सकता है? –