function - 将对象作为参数传递给函数:MATLAB
问题描述
我有一个带有按钮的基本 GUI,您可以按下该按钮来选择导出路径,并带有一些文本显示选择的导出路径是什么。默认情况下,文本显示当前工作目录,直到您选择不同的目录。
我将所有必需的变量和对象作为回调函数 (ExportPath) 中的参数传递。
exportPath_Button = uibutton(exportSelection_Group, 'Position', [9 .* exportSelection_Group.Position(3) ./ 10 - 10, 5, exportSelection_Group.Position(3) ./ 10, exportSelection_Group.Position(4) - 30], 'Text', 'Select Path', 'ButtonPushedFcn', {@ExportPath, currentFolder, exportFolder, exportPath_Text});
function ExportPath(~, ~, currentFolder, exportPath, exportPath_Text)
folderSelection = uigetdir(currentFolder, 'Export Folder');
switch folderSelection
case 0
return
otherwise
exportPath = folderSelection;
exportPath_Text.Text = ['Export path: ', currentFolder];
end
end
尽管直接将基础对象作为参数传递,但为什么函数只会更改函数空间对象,而不更改基础对象?
然而,在我让一些图像在另一个函数中可见的情况下,将图像作为参数传递给回调函数(如下所示),效果很好,并且图像改变了它们的可见性?
CPU_Group = uibuttongroup(mainWindow, 'Position', [10, (uiSize - uiSize ./ 3) - 10, innerSize(1), uiSize ./ 10], 'Title', 'CPU', 'TitlePosition', 'centertop', 'SelectionChangedFcn',{@CPUSelection, amd_Image, intel_Image});
function CPUSelection(~, event, AMD_Logo, Intel_Logo)
switch event.NewValue.Text
case "AMD"
AMD_Logo.Visible = 'on';
Intel_Logo.Visible = 'off';
case "Intel"
Intel_Logo.Visible = 'on';
AMD_Logo.Visible = 'off';
end
end
非常感谢!
解决方案
您的对象是否继承自handle
? 如果不是,那么它们是按值传递、写入时复制(“CoW”)对象,并且您的函数最终会在原始对象的副本上运行,并且原始对象未更改。handle
如果您想要传递引用行为和共享可变状态,请让您的对象继承自。
推荐阅读
- javascript - how to change select box value in jquery or javascript
- xamarin - 使用从 Nib 创建的 MvxTableViewCell 时,我应该在哪里放置初始化/绑定逻辑?
- jquery - No 'Access-Control-Allow-Origin' header is present error using bigcommerce api mvc
- datatable - 带有长查询字符串的 404
- javascript - 以角度形式修补值
- npm - 从 sinopia 本地 NPM 注册表取消发布包
- android - Gson Post 方法
- wordpress - 在wordpress的菜单栏中滑动带有标题的图像
- laravel - 使用 Laravel 5.5 通过 amazon ses 发送邮件以进行用户验证
- javascript - 按类型过滤数组对象并将键值与对象进行比较