2017-09-04 38 views
1

我想修改函數rand和定義自己的功能傳遞varargin到子功能,如果串

function num = rand(varargin) 

大多數時候,我只是包裝調用

num = builtin("rand", [varargin{:}]); 

,這工作得很好,除了在情況下有一個字符串參數。

對於rand(2,3,"double")我獲得

warning: implicit conversion from numeric to char 
warning: called from rand at line 83 column 11 
error: rand: unrecognized string argument 
error: called from rand at line 83 column 11 

rand("seed",2)相同。

另一方面,rand("seed")似乎工作正常。

任何人都可以提供解釋和解決方案嗎?

+2

'num = builtin('rand',varargin {:});'應該有效。 – rahnema1

回答

1

語法:

num = builtin('rand', [varargin{:}]); 

會爲你在輸入參數可表示爲的情況下才起作用無論是comma-separated list或載體,當你指定rand大小如:

num = rand(2, 3, 4); 
% Or ... 
num = rand([2 3 4]); 

會爲輸入不的工作,必須單獨輸入,就像這樣:

num = rand(2, 3, 'double'); % Works 
num = rand([2 3 'double']); % Throws an error 

在一般情況下,你應該只通過的varargin內容作爲一個逗號分隔的列表(不collecting the contents into a vector/matrix)因爲builtin被設計爲處理就好了:

num = builtin('rand', varargin{:}); 

另外,還要留意之間的差異「字符串」如'rand'(a character array)和"rand"(a string)。在某些情況下,他們可能有不同的行爲。