2016-01-30 37 views
2

是否可以確定Scilab中函數的參數個數?如何知道Scilab函數的參數個數

比方說,我有一個函數如下:

function T = test(t,x) 
    T = t*x 
endfunction 

在這種情況下,我應該得到2作爲輸出。 更具體地說,我的目標是知道參數的數量,但是唯一地使用函數的名字。

function N = NumberArgument(F) 
    // F is a function 
    N = .... 
endfunction 

所以我想有

a = NumberArgument(test) 
a = 2 

謝謝您的回答

回答

0

短外參數:

我認爲這是不可能的。

長:

你想獲得一個功能type signature

後的一點點研究我發現,用戶定義函數和一些內置的功能(在SCILAB編碼的那些)具有相同的類型:

-->deff('[r] = test(a, b)', 'r=a*b'); 
-->type(test) 
ans = 
    13. 
-->type(plot) 
ans = 
    13. 

我認爲你不能有更多的有關功能的信息不是類型。

現在,假設你想要簽名的情節。

正如你所看到的here有多個簽名(注意plot()沒有參數沒有記錄)。

幾乎所有SCILAB功能使用argn以及與此簽名可能性無限......

1

是,使用argn您可以確定的輸入&輸出參數的個數

function T = test(t,x) 
    [lhs,rhs]=argn(0); 
    disp(rhs); 
    T = t*x; 
endfunction 

使用macrovar您可以確定數量從功能

function N = NumberArgument(F) 
    // F is a function 
    all_vars = macrovar(F); 
    in_vars = all_vars(1); 
    N = size(in_vars, 1); 
endfunction 

disp(NumberArgument(test)) 
+0

謝謝您的回答, 但是,要使用ARGN,我必須調用實際參數的函數:如測試(1 ,2)。 我的目標是知道參數的數量,但唯一地使用函數的名字。 功能N = NumberArgument(F) // F是一個函數 N = .... endfunction這樣 所以我想有 A = NumberArgument(測試) A = 2 –

+0

這個回答可以幫助您? – spoorcc

相關問題