あなたは、少なくともヘルパー関数のカップルでOSAKitを使用して、シェルスクリプトの呼び出しよりも速く何かを行うことができます:
// sqlMatchIDs :: String -> [String]
function sqlMatchIDs(strClause) {
// SELECT clause without the leading SELECT keyword
var strResult = evalOSA(
'', eventCode('SQLS') +
' "' + strClause + '"'
);
return strResult.indexOf('\r') !== -1 ? (
strResult.split('\r')
) : (strResult ? [strResult] : []);
}
とを:あなたはのような関数を書くことができ
// evalOSA :: String -> String -> IO String
function evalOSA(strLang, strCode) {
var oScript = ($.OSAScript || (
ObjC.import('OSAKit'),
$.OSAScript))
.alloc.initWithSourceLanguage(
strCode, $.OSALanguage.languageForName(strLang)
),
error = $(),
blnCompiled = oScript.compileAndReturnError(error),
oDesc = blnCompiled ? (
oScript.executeAndReturnError(error)
) : undefined;
return oDesc ? (
oDesc.stringValue.js
) : error.js.NSLocalizedDescription.js;
}
// eventCode :: String -> String
function eventCode(strCode) {
return 'tell application "Bookends" to «event ToyS' +
strCode + '»';
}
ここでは例の
sqlMatchIDs("authors like '%Harrington%'")
フラーのセットのように呼び出します:JavaScript wrappers for Bookends functions