您可以从名为Trung.NguyenThe
的类创建对象,因为NguyenThe
不是方法吗?
答案 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已经是一个班级名称?