3

私が書いたコードを Python から Lua に翻訳しようとしています。このコードは、合成パッケージ Blackmagic Fusion 内で使用しています。

どんな助けでも大歓迎です!

Python スクリプト (作業中):

try:
    comp.ActiveTool()                            # checks if a tool is selected
except:
    print("nothing selected")
    comp.AddTool("PolylineMask", -32768, -32768) # adds a tool if nothing's selected

Lua スクリプト (まだ動作せず、エラーが発生しています):

if pcall (comp:ActiveTool()) then
    print "Node Selected"
else
   comp:AddTool("PolylineMask", -32768, -32768)
end
4

4 に答える 4

1

pcall を正しく使用していません。実際に呼び出したい関数を渡す必要があり、エラーをトラップできる保護モードで呼び出します。

pcall は、呼び出しが成功したかどうかを示すブール値と、呼び出しが成功しなかった場合のエラー コードの 2 つの値を返します。

lua コードは次のようになります。

local ok, err = pcall(comp.ActiveTool, comp)
if not ok then
    print(err, 'nothing selected')
    comp.AddTool(...)
else -- the call succeeded
    print 'Node Selected'
end

また、パラメータを取る pcall を使用して関数を呼び出したい場合は、それらを追加の値として pcall に渡すだけで、呼び出し時に指定したメソッドにそれらが渡されます。

local ok, err = pcall(comp.AddTool, 'PolylineMask', -32768, -32768)

例として。

上記の行は、大まかに次のように変換されます。

try {
    comp.AddTool('PolylineMask', -32768, -32768);
    return true
} 
catch (err) {
    return false, err
}
于 2013-07-24T17:15:48.877 に答える
0
-- test.lua
require "try-catch"

try {
   function ()
      error('oops')
   end,

   catch {
      function (error)
         print('caught error: ' .. error)
      end
   }
}

...

-- try-catch.lua
function catch (what)
   return what[1]
end

function try (what)
   status, result = pcall(what[1])

   if not status then
      what[2](result)
   end

   return result
end

オリジナルhttps://gist.github.com/cwarden/1207556

于 2015-07-19T23:31:45.690 に答える