其他语言中的 VBA With 语句等效项

标签 vba language-features language-comparisons

在 VBA 中,有一个很酷的功能,称为 With 语句,它可以让您设置代码块的全局范围。这对于更改对象的多个字段和调用方法很有用。

这是一个例子:

With Forms!main
    .Filter = "tel IS NOT NULL"
    .FilterOn = True
    .Requery  'This is a method!
    If .Recordset.RecordCount> 3 Then
        .BackColor = "Red"
    End If
End With

在此示例中,所有以 . 开头的语句均引用 Forms!main 的字段和方法。

我还没有在任何现代语言(Javascript、C#、Python)中遇到过这样的功能,我想知道这是否有原因?

最佳答案

有一篇有用的维基百科文章将其描述为 method cascading ,基本上是 syntactic sugar 的一种类型。文章包括 , 与具有此功能的其他语言一样。

它也是用 Javascript 编写的,但是 note那:

...using with is not recommended, and is forbidden in ECMAScript 5 strict mode

const obj = {a: 1, b: 2}

with (obj) {
  const k = a + b; // no need for a .
  console.log(k)
}

根据此 answer,它也包含在 C# 9.0 中- 阅读所有答案以了解上下文。

另一个有趣的帖子是 this one这对我回答“为什么”这个功能没有更广泛的问题有一定的帮助。

“糖”可能会变得“太甜”,例如:

k = 99
With foo
    With .bar
        With .baz
            If Not .qux Is Nothing Then
                k = 4
            End If
        End With
        For i = 1 to .NumberOfThings
            k = k + i
        Next i
    End With
    .DoAllTheThings(k, SomeOtherVariable)
End With

与您更简洁和可读的示例相比,突然使用 With 不再那么有用。我们可以看到该功能引起了争议(由于过度使用),这就是它尚未真正成为主流的原因。

关于其他语言中的 VBA With 语句等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71465816/

相关文章:

excel - VBA 从一个单元格中选择值并放入另一个单元格

excel - 如何返回当前选定单元格的地址并随着光标移动而更新它?

c# - 有没有办法在 VB 中转义根命名空间?

php - 实现python切片表示法

excel - 删除 Microsoft Excel 中特定标记之间的文本

vba - VB - 除整数不包括逗号?

c++ - 逻辑运算符的书面版本

perl - 用于 Perl Web 开发的 ASP 样式标签?

c++ - C中有const吗?

c# - 使用 PowerShell 在声明时初始化字典