我可以在Ruby / Java / C#中创建这样的Object吗?

时间:2010-11-09 16:47:48

标签: c# java ruby object naming-conventions

您可以从名为Trung.NguyenThe的类创建对象,因为NguyenThe不是方法吗?

4 个答案:

答案 0 :(得分:3)

在Java C#和Ruby中,您无法在名称中创建.的变量。

// C# and Java
Object Trung.NguyenThe = "";
# Ruby
Trung.NguyenThe = ""

该变量名称在所有三种语言中都是非法的。

如果您想要执行类似的操作,请使用下划线_

// C# and Java
Object Trung_NguyenThe = "";
# Ruby
Trung_NguyenThe = ""

答案 1 :(得分:1)

首先,对象没有名称。类和变量可以。

所以我假设你要求用句点命名(基于你的上一条评论)......

直接答案是“不”,但可以使用命名空间/包或内部类来模拟它。

命名空间:

namespace Trung {
    public class NguyenThe {}
}

// Usage:
namespace Whatever {
    public class Client {
        public main() {
            var x = new Trung.NguyenThe();
        }
    }
}

内班:

namespace Whatever {
    public class Trung {
        public class NguyenThe {}
    }

    // Usage:
    public class Client {
        public main() {
            var x = new Trung.NguyenThe();
        }
    }
}

(注意:这是C#代码,但我确信在Java中也可以这样做。我猜Ruby也有相同的概念。)

答案 2 :(得分:1)

在Ruby中,没有类名这样的东西。类就像所有其他对象一样被赋予变量,就像任何其他变量一样。

Trung.NguyenThe不是合法的变量名称,因此这是不可能的:

class Object
  klass = Class.new do
    def to_s; 'Hello' end
  end
  const_set :'Trung.NguyenThe', klass
  # NameError: wrong constant name Trung.NguyenThe
end

当然可以创建一个对象,该对象响应带有类的NguyenThe消息,并将该对象分配给名为Trung的变量,但这不是什么你在问:

klass = Class.new do
  def to_s; 'Hello' end
end
(Trung = Object.new).define_singleton_method(:NguyenThe) { klass }

puts Trung.NguyenThe.new
# Hello

在C#和Java中,句点在类名中也是非法的。 C#有一个转义机制,允许你使用其他保留字作为名称,但这种机制不能使用非法名称,只能使用保留名称。

有人提出Java名称中更具象征性的自由,但到目前为止,它们还没有实现。

答案 3 :(得分:0)

不确定。创建一个名为Trung的包。在这个包中创建一个名为NguyenThe。

的类

或者你认为Trung已经是一个班级名称?