Clojure 为什么赢了';这张照片没打印出来什么吗?

Clojure 为什么赢了';这张照片没打印出来什么吗?,clojure,Clojure,为什么这个不能打印出任何东西,但是如果我只使用(打印“ASDAS”),它会工作,我使用的是LightTable,它在控制台中打印出来 (defn try [x] (print ("ASDASD") )) (try 5) try是一种特殊的异常处理形式。请看下面的例子 您可以: 通过(您的ns在这里/try 5)直接引用它,很可能(用户/try 5) 为函数使用不同的名称 Clojure中的try函数用于异常处理。。。更改您的函数并查看 这是: ("ASDF") 是函数调用,但字符串不

为什么这个不能打印出任何东西,但是如果我只使用(打印“ASDAS”),它会工作,我使用的是LightTable,它在控制台中打印出来

(defn try [x]
 (print ("ASDASD")
))

(try 5) 

try
是一种特殊的异常处理形式。请看下面的例子

您可以:

  • 通过
    (您的ns在这里/try 5)
    直接引用它,很可能
    (用户/try 5)
  • 为函数使用不同的名称

    • Clojure中的try函数用于异常处理。。。更改您的函数并查看

      这是:

      ("ASDF")
      
      是函数调用,但字符串不是函数。不起作用

      因此,这也不起作用:

      (print ("ASDF"))
      
      要打印字符串,请执行以下操作:

      (print "ASDF")
      
      名称
      try
      不是一个好主意,因为它隐藏了Clojure核心中已经存在的名称

      因此:


      如果它起作用,那么您正试图在
      (“ASDASD”)
      中将字符串作为函数调用。您希望从中得到什么结果?在我看来,它要么通过隐藏
      try
      (Scheme执行此操作),要么抱怨
      try
      被保留(大多数语言都执行此操作)。忽略
      #“user/try
      是一个弱点,也是错误的根源。@Sylwester它并不是那么简单。
      try
      在Scheme中似乎不是作为一种特殊形式存在的,所以我不确定您想做什么比较。但是在Clojure中,如果我们允许对
      try/catch/finally
      进行阴影处理,您会对普通的
      try做什么e> 在
      catch
      被隐藏的范围内?大多数特殊的表单确实可以被隐藏(例如
      fn
      ),但是
      try/catch/finally
      是复杂的,因为它们是三人一起工作的。@amalloy Scheme使用不同的语法(
      guard
      )处理异常。当我执行
      (catch…)
      try
      之外,我得到了
      catch:undefined
      ,因此我想如果
      try
      被覆盖,并且它内部有一个
      catch
      ,它不会假定它是
      catch
      ,而是另一个未定义该名称的函数或宏。
      (defn my-experiment [x]
        (print x))
      
      (my-experiment "ASDF")