هاسكل بناء الجملة من أجل التعبير الحال في كتلة افعل

StackOverflow https://stackoverflow.com/questions/156013

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا لا يمكن معرفة تماما من هذه المشكلة في بناء الجملة مع تعبير case في كتلة do.

ما هي الجملة الصحيح؟

إذا كنت قد تصحيح بلدي على سبيل المثال وتفسير ذلك من شأنه أن يكون أفضل.

module Main where 

main = do   
     putStrLn "This is a test"
     s <- foo
     putStrLn s  

foo = do
    args <- getArgs 
    return case args of
                [] -> "No Args"
                [s]-> "Some Args"

وعملية تحديث القليل. كان ملف مصدر بلدي مزيج من المسافات وعلامات التبويب وأنها تسبب جميع أنواع المشاكل. مجرد تلميح لأي شخص آخر بدءا من هاسكل. إذا كنت تواجه مشاكل في الاختيار لعلامات التبويب والمسافات في التعليمات البرمجية المصدر.

هل كانت مفيدة؟

المحلول

والإرجاع (زائد) وظيفة، وانها لا تتوقع أول حجتها أن تكون الكلمة. يمكنك إما parenthesize:

module Main where 
import System(getArgs)

main = do   
     putStrLn "This is a test"
     s <- foo
     putStrLn s  

foo = do
    args <- getArgs 
    return (case args of
                [] -> "No Args"
                [s]-> "Some Args")

وأو استخدام عامل التشغيل سهل التطبيق ($):

foo = do
    args <- getArgs 
    return $ case args of
                [] -> "No Args"
                [s]-> "Some Args"

وStylewise، ويهمني ان كسر بها إلى وظيفة أخرى:

foo = do
    args <- getArgs 
    return (has_args args)

has_args [] = "No Args"
has_args _  = "Some Args"

ولكن ما زالت هناك حاجة إلى parenthesize أو استخدام ($)، لأن عودة يأخذ وسيطة واحدة، وتطبيق وظيفة هو أعلى الأسبقية.

نصائح أخرى

ومكافئ:

foo = do
  args <- getArgs 
  case args of
        [] -> return "No Args"
        [s]-> return "Some Args"

وانها ربما من الأفضل أن تفعل كما يقترح wnoise، ولكن هذا قد تساعد شخص فهم أفضل قليلا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top