You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UML isDistinguishableFrom规则:同作用域同名不同类型共存的编程语言有哪些?

同一作用域中支持同名不同类型元素的编程语言

UML 2.5.1规范第91页的NamedElement描述7.8.9.7“操作”章节中定义了isDistinguishableFrom操作,该查询用于判断两个NamedElement能否在同一Namespace中逻辑共存,默认规则为:(a)两者类型互不派生,或(b)名称不同时可区分。

基于上述规则,我们想知道:哪些编程语言支持同一作用域中仅因类型不同而存在同名元素?

经测试C++不支持该特性,测试代码及编译报错如下:

测试代码:

#include <iostream>

int main() {
  int a = 4711;
  const char *a = "Hello, Strange World";
  ++a;
  std::cout << a << std::endl;
  return 0;
}

编译报错:

bob@my_laptop:~/code$ g++ -c strange.cpp 
strange.cpp: In function ‘int main()’:
strange.cpp:6:15: error: conflicting declaration ‘const char* a’
    6 |   const char *a = "Hello, Strange World";
      |               ^
strange.cpp:5:7: note: previous declaration as ‘int a’
    5 |   int a = 4711;
      |       ^

以下是支持该特性的编程语言:

  • Ada:允许在同一作用域内声明同名但不同类型的实体,编译器可通过代码中的类型上下文区分使用。
  • Scala:支持同一作用域中存在同名不同类型的变量、方法或类,依赖类型推断或显式注解来明确使用场景。
  • Haskell:允许同名不同类型的值存在于同一作用域,通过类型签名或使用时的上下文让编译器确定具体引用。
  • Rust:同一作用域内可以有同名但不同类型的项,通常需要显式类型注解消除歧义,编译器会根据类型匹配解析。
  • OCaml:支持同一作用域内的同名不同类型绑定,编译器会依据调用时的类型上下文自动区分。

内容的提问来源于stack exchange,提问作者Robert Hairgrove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:59:56