ismethod(字符串(“测试”),“endsWith”)下R2016b和2018 b

1视图(30天)
R2016b:
ismethod (string (“自闭症”),“endsWith”)
ans =逻辑(1)
R2018b:
ismethod (string (“自闭症”),“endsWith”)
ans =逻辑(0)
这是记录吗?我没有finf发行说明。
实际上 ismethod 使用第一个输入的类。但对于 字符串 似乎有一个例外。这是正确的用法:
data =字符串(“自闭症”)
ismethod(类(数据),“endsWith”)
吗?

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2019年2月9日
ismethod()调用方法()。方法()有两种形式:它可以通过类名,或一个对象。字符串(asd)是一样的“自闭症”,在所有当前的版本中,您可以指定类名作为特征向量或标量字符串对象。
在R2016b字符串对象刚刚被引入时,有很多例程没有升级到接受字符串对象的字符特征向量的向量数组或单元。每个版本之后,越来越多的转换例程。他们中的大多数被R2018a转换,但R2018b版本注释表明持续甚至为R2018b变化,尤其是一个新的奇怪的变化表(),()和addVars时间表()可能会导致混乱。
3评论

登录置评。

答案(1)

1月
1月 2019年3月22日
R2019a解释的发布说明:
- - - - - - - - - - - - - - - - - -
第一个参数 ismethod 必须是一个对象
在未来的发布行为改变
ismethod 功能是记录寻找对象的一个方法是指定为第一个输入。然而, ismethod 函数把 字符串 字符 输入类名和查找指定的方法在这类。因此,您不能使用 ismethod 找到一个输入对象的方法 字符串 字符 数组中。在将来的版本中, ismethod 只会返回true,如果第二个输入的名字是第一个输入对象的一个方法。 ismethod 不会把第一个输入作为类名。
代码使用 ismethod 类名称指定为一个字符串标量或特征向量,可以替代这个表达式作为替代,将工作在当前和未来的版本。
任何(strcmp (“methodName”、方法(“名称”)))
- - - - - - - - - - - - - - - - -
我的解决方案:
ismethod(类(数据),“endsWith”)
不兼容老的和未来的Matlab版本,但这是必要的:
任何(strcmp (“endsWith”、方法(类(数据)))
真遗憾。如果MathWorks已经决定,第一个输入的 ismethod 必须是一个字符串或字符向量包含类名称,我的想法是一个完美的解决方案。因为这是一个“改变”在将来发布的版本中我们不知道,后果时修改和使用 ismethod 依然脆弱。
1评论
朱利安
朱利安 2020年3月6日
我刚刚触及这个问题,推导出相同的解决方案!我应该先检查答案……我只有在bug报告搜寻 ismethod 但是没有。当前有缺陷的实现是一个错误,因为它与医生。
发布说明中描述的未来行为R2019a会纠正错误,虽然没有在R2019b。避免调用 ismethod 直到固定!

登录置评。

类别

找到更多的在构建和使用对象数组帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!