假设我定义了这样的clojure函数:
(defn print-this [this] (println "print this: " this))
Run Code Online (Sandbox Code Playgroud)
如果我在repl中使用该函数:
(print-this that)
Run Code Online (Sandbox Code Playgroud)
我最终会:
print this: that
nil
Run Code Online (Sandbox Code Playgroud)
作为输出.
现在,如果我做出这样的定义:
(defn import-by-name [name] (import (some.package.value name)))
Run Code Online (Sandbox Code Playgroud)
并使用repl中的函数:
(import-by-name "SomeClassName")
Run Code Online (Sandbox Code Playgroud)
我明白了
java.lang.ClassNotFoundException: some.package.value.name (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)
我希望将"name"替换为"SomeClassName".如果我输入:
(import (some.package.value SomeClassName))
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.
为什么在上面的name-by-name函数中没有解释[name]?是否可以从变量值动态导入java类?如果是这样的话?谢谢!
这是一段代码:
import ast
from oauth2client import file, client, tools
from oauth2client.service_account import ServiceAccountCredentials
from httplib2 import Http
from apiclient.discovery import build
from apiclient import discovery
SCOPE = 'https://www.googleapis.com/auth/spreadsheets'
CREDJSON = "some-cred-file-downloaded-from-dev-console.json"
def google_credentials(jsoncred=CREDJSON, scope=SCOPE):
return ServiceAccountCredentials.from_json_keyfile_name(jsoncred, scope)
def csv_arrays(creds, key):
(SHEETS, sheets) = sheets_fetch(creds, key)
wks = sheets
def create_filename(arg):
filename = key.prefix + "_" + arg.get("properties, {}).get("title","Sheet1")
filename = filename.replace(" ", "_")
print (filename)
return filename
return [(create_filename(ws), ast.literal_eval(repr(SHEETS.spreadsheets().values().get(spreadsheetId=key.key, range=(ws.get("properties", {}).get("title", "Sheet1"))).execute().get('values',[])))) for ws in wks] #.decode("utf-8")
def sheets_fetch(creds, …Run Code Online (Sandbox Code Playgroud)