我正在尝试使用发现的一些资源编写一次播放声音文件的功能。代码如下:

(defn play [file]
  (let [songp (URL. (.getCodeBase) file)
    song (.newAudioClip songp)]
    (. song play)))

The problem is, (.getCodeBase) is a malformed member expression. I'm not sure what to do. How do you call a method like this? In the Java code I looked at, it was simply called like so:

getCodeBase()

我想念什么吗?

最佳答案

.getCodeBase是一个实例方法调用,因此需要一个接收器(Java中点之前的内容)。如果您的Java代码只是getCodeBase(),则有两种可能性:要么实际上就是this.getCodeBase(),在这种情况下,您应该弄清楚该方法中的this,并将其指定为第一个参数:

(.getCodeBase obj)

或者,它可以是该类(或其基类之一)的静态方法,在这种情况下,您应该使用静态方法调用表达式:
(ClassName/getCodeBase)

在足够的上下文中发布您要转换的Java代码,可能会有助于更详细地回答这一问题。

10-08 03:52