我想有一个常量材料的目录,所以我可以使用如下所示的代码:
Dim MyDensity, MySymbol
MyDensity = ALUMINUM.Density
MySymbol = ALUMINUM.Symbol
Run Code Online (Sandbox Code Playgroud)
显然铝的密度和符号预计不会改变所以我希望它们是常数但我喜欢简单的点符号.
我看到了几个选项,但我不喜欢它们.
为每种材料的每个属性制作常量.这似乎太多常数,因为我可能有20个材料,每个都有5个属性.
Const ALUMINUM_DENSITY As Float = 169.34
Const ALUMINUM_SYMBOL As String = "AL"
Run Code Online (Sandbox Code Playgroud)使用所有材质定义枚举并生成返回属性的函数.密度不是很明显,因为它的值是由函数返回的.
Public Enum Material
MAT_ALUMINUM
MAT_COPPER
End Enum
Public Function GetDensity(Mat As Material)
Select Case Mat
Case MAT_ALUMINUM
GetDensity = 164.34
End Select
End Function
Run Code Online (Sandbox Code Playgroud)似乎Const Structs或Const Objects不会解决这个问题,但也许我错了(甚至可能不被允许).有没有更好的办法?
我正在用 VBA 编写一个函数,该函数的参数可以是多种不同类型,我想知道检查类型的最佳方法是什么以及每种方法有哪些优点和缺点。我正在考虑两种方法。
第一种方法是使用带有 TypeName 的案例选择。第二种方法是使用 TypeOf 有一个大的 if else 语句。
我认为方法 1 看起来更干净,可读性更好,但可能会出现拼写错误。我认为方法2具有编译安全性。有没有一种方法是普遍首选的?
'method 1
Select Case TypeName(InputVariable)
Case "Type1", "Type2", "Type3", "Type4"
'do something
Case Else
'do something else
End Select
'method 2
If TypeOf InputVariable Is Type1 Or_
TypeOf InputVariable Is Type2 Or_
TypeOf InputVariable Is Type3 Or_
TypeOf InputVariable Is Type4 Then
'do something
Else
'do something else
End If
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,我学到了一些非常重要的东西,它改变了一切,我认为这对人们了解很有用。多态性和 Implements 关键字确实会影响这种情况。
如果我有一个 foo 类和一个实现 foo 的类 bar 那么
Dim MyFoo As Foo
Dim …Run Code Online (Sandbox Code Playgroud) std :: string resize导致看起来等于不再相等的字符串.当我将鼠标悬停在调试器中的变量上并且它们看起来保持相同的值时,它似乎会产生误导.
我认为这可以归结为我希望==运算符停在第一个空字符但它一直持续到大小结束的事实.我确定这是按预期工作但我被这个问题引起了一段时间,因此我想知道为什么即使在第一个空字符之后你也会继续比较字符.谢谢!
int main(void)
{
std::string test1;
test1.resize(10);
test1[0] = 'a';
std::string test2 = "a";
//they are not equal
bool same = (test1 == test2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)