所以我正在学习java,我有一个问题.看起来这些类型int,boolean并且string几乎float可以满足我在变量方面所需要的一切,除非在数字中需要十进制数字时可以使用.
我的问题是,其他类型的如long,double,byte,char等曾经在正常的日常编程中使用?可以使用哪些实用的东西?他们存在什么?
有谁知道是否可以在.NET中定义"java自定义类加载器"的等价物?
给一点背景:
我正在开发一种针对CLR的新编程语言,称为"Liberty".该语言的一个特性是它能够定义"类型构造函数",它是编译器在编译时执行并生成类型作为输出的方法.它们是泛型的泛化(该语言确实具有普通泛型),并允许编写这样的代码(使用"Liberty"语法):
var t as tuple<i as int, j as int, k as int>;
t.i = 2;
t.j = 4;
t.k = 5;
Run Code Online (Sandbox Code Playgroud)
"tuple"的定义如下:
public type tuple(params variables as VariableDeclaration[]) as TypeDeclaration
{
//...
}
Run Code Online (Sandbox Code Playgroud)
在这个特定的例子中,类型构造函数tuple提供类似于VB和C#中的匿名类型.
但是,与匿名类型不同,"元组"具有名称,可以在公共方法签名中使用.
这意味着我需要一种方法,最终由编译器发出的类型可以跨多个程序集共享.例如,我想要
tuple<x as int>在程序集A中定义的最终类型与tuple<x as int>程序集B中定义的类型相同.
当然,问题是程序集A和程序集B将在不同的时间进行编译,这意味着它们最终都会发出自己不兼容的元组类型版本.
我考虑使用某种"类型擦除"来做这个,所以我会有一个像这样的一堆类型的共享库(这是"Liberty"语法):
class tuple<T>
{
public Field1 as T;
}
class tuple<T, R>
{
public Field2 as T;
public Field2 as R;
}
Run Code Online (Sandbox Code Playgroud)
然后只重定向来自第i,j和k元组字段来访问Field1,Field2和Field3.
然而,这不是一个真正可行的选择.这意味着,在编译时 …
.net compiler-construction clr language-features programming-languages
受到这种讨论的启发,经过一些谷歌搜索后,我无法找到关于Ruby方法的一个非常简单的问题的答案:方法对象与否?
我知道Object#method方法,它接受一个方法名称并返回一个Method实例,但另一方面,你可以用块做类似的事情来使它们成为Proc实例,而块不是对象,所以是什么使得方法有什么不同?
您是否曾限制自己使用语言功能的子集,更重要的是,为什么?
我很想知道谁选择只使用某些语言功能并避免使用其他功能,以便在诸如但不限于内存使用,执行速度或普通旧可读性和可维护性等方面赢得大奖.通过这样做,它产生了预期的结果,或者它可能只是妨碍了生产软件的其他方面.是否有任何关于这个主题的警示故事或狂野的成功故事值得分享?
在我的Java代码中,我经常使用非常方便的method(Class... args)varargs.据我所知,它们允许您传递任意数量的Class对象或数组Class[].由于我也经常使用Java集合类,因此两者之间缺乏兼容性使我感到沮丧.结果,我最终做了collection.toArray(),但这有一些类型安全问题.
所以现在问题是:为什么Java不允许实例Iterable<T>作为vararg参数,只要泛型类型适合T...vararg 的类型?不是每个人都一直使用列表,集等吗?是否有一种简单,类型安全的方式来提供从集合到vararg的转换?
如何scala.collection.JavaConversions取代Stack Overflow问题中的答案迭代Scala中的Java集合(它不起作用,因为"jcl"软件包已经消失了)和迭代使用Scala的Map(它在复杂的测试中对我不起作用)我将尝试归结并在此后发布).
后者实际上是一个Scala Map问题,但我想我需要知道这两个答案才能迭代java.util.Map.
这是我们团队中不时出现的讨论.虽然有一些人很快学会了C#3.0的功能,但其他人坚持使用经典技术.
有些人从不使用Linq,认为lambda表达式令人困惑,而且收益率是"可怕的".有时他们很难理解使用所有新功能的人编写的代码.我们可以说他们不掌握语言并且应该学习它.
但是,学习现代编程语言有多难?每个人都可以解决问题,每个人每天都要解决许多其他问题,而不是关心实施它的更好方法.培训人员不是免费的.另一方面,语言功能可以提高人们的工作效率,使代码更易于维护.
可能不完整的C#功能列表
版本4即将推出,包括许多其他功能.
就个人而言,我几乎喜欢C#的所有功能,并喜欢用这种语言编写的简短代码.但我不必从头学习它.
我对您的意见以及您在学习或教授C#方面的经验感兴趣.是否有太多功能?还缺少重要的功能吗?语言功能是否使语言更易于使用或更难学?
请:没有答案像"语言A比语言B更好,因为......".
我想,我把手远离德尔福太久了.在过去的几年里,我一直忙于Java和PHP.现在,当我回到做一点Delphi工作时,我意识到我真的很想念Java和PHP都支持的条件运算符.
在Delphi程序中你会找到多少个这样的行?
var s : string;
begin
...<here the string result is manipulated>...
if combo.Text='' then
s := 'null'
else
s := QuotedStr(combo.Text);
result := result + s;
end;
Run Code Online (Sandbox Code Playgroud)
哪里很简单
result := result + (combo.text='')?'null':quotedStr(combo.text);
Run Code Online (Sandbox Code Playgroud)
就够了 我喜欢这个,它不仅缩短了代码,这样我也避免声明一些辅助s:string变量.
为什么条件运算符不是Delphi的一部分 - 它们是否会得到支持?我注意到2009版Delphi(泛型)有很多语言扩展,为什么不添加这个功能呢?
我开始注意到,当我在C#中进行方法调用时,我调用的方法的参数名称将显示在附加冒号的intellisense列表中,然后我可以格式化该方法这样打电话:
MethodCall(parameter1:value1, parameter2:value2);
Run Code Online (Sandbox Code Playgroud)
这是一种新的语言功能吗?它让我想起了在SQL中调用存储过程的方式,并指定参数名称,如下所示:
spDoSomeStuff @param1 = 1, @param2 = 'other param'
Run Code Online (Sandbox Code Playgroud)
这是一个类似的功能吗?如果是这样,到底是什么?如果没有,它是什么以及它用于什么.