Можете ли вы вложить анонимные функции в значения по умолчанию для классов MATLAB? - PullRequest
3 голосов
/ 16 апреля 2020

В MATLAB кажется, что вы можете вкладывать анонимные функции следующим образом:

>> x = @() @() 1
x =
  function_handle with value:
    @()@()1

Однако я сталкиваюсь с проблемами, когда делаю это в значениях по умолчанию для свойств класса. Например, если я определяю класс

classdef MyClass
    properties
        Property1 = @() @() 1
    end
end

и создаю экземпляр, я получаю ошибку.

>> MyClass
Invalid default value for property 'Property1' in class 'MyClass':
Error: Invalid use of operator. 

Что с этим? Есть ли способ сделать это правильно?

(MATLAB R2019b)

Редактировать: Вот интересный обходной путь, который не вызывает ошибок:

classdef MyClass
    properties
        Property1 = someLocalFcn
    end
end

function out = someLocalFcn
    out = @() @() 1;
end

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете рассмотреть возможность обновления до MATLAB 2020a, ваш код работает должным образом:

>> x=MyClass

x = 

  MyClass with properties:

    Property1: @()@()1

>> y=x.Property1

y =

  function_handle with value:

    @()@()1

>> z=y()

z =

  function_handle with value:

    @()1

>> z()

ans =

     1
...