假设我有以下课程:
public class FixExpr {
Expr<FixExpr> in;
}
Run Code Online (Sandbox Code Playgroud)
现在我想介绍一个泛型参数,抽象使用Expr:
public class Fix<F> {
F<Fix<F>> in;
}
Run Code Online (Sandbox Code Playgroud)
但Eclipse并不喜欢这样:
F型不是通用的; 它不能用参数<Fix <F >>进行参数化
这是可能的还是我忽略了导致这个特定实例破坏的东西?
一些背景信息:在Haskell中,这是编写泛型函数的常用方法; 我正在尝试将其移植到Java.上例中的类型参数F具有类型* - >*而不是通常的类型*.在Haskell中它看起来像这样:
newtype Fix f = In { out :: f (Fix f) }
Run Code Online (Sandbox Code Playgroud) 这是一个语言设计问题:
您是否认为无法访问的代码(通常是编程语言)应该发出警告(即"报告问题并反正编译")或错误("拒绝编译")?
就个人而言,我强烈认为这应该是一个错误:如果程序员编写了一段代码,那么它应该始终是为了在某些情况下实际运行它.但是,例如C#编译器似乎不同意这一点,只是报告了一个警告.
注意:我意识到良好的死代码检测是一个非常困难的问题,但这不是这个问题的焦点.
以下是一些代码片段的示例,其中一些语句明显无法访问:
return;
foo();
Run Code Online (Sandbox Code Playgroud)
-
throw new Exception();
foo();
Run Code Online (Sandbox Code Playgroud)
-
if (...) {
return;
} else {
throw new Exception();
}
foo();
Run Code Online (Sandbox Code Playgroud) 考虑下面的JSP:
<param name="FlashVars" value="${flashVars}" />
Run Code Online (Sandbox Code Playgroud)
${flashVars}
包含&符号的值需要在输出之前进行编码.相反,JSP期望值为${flashVars}
HTML的一部分,并逐字输出&符号,导致HTML错误.
我发现如果我像这样编写它,我可以得到要编码的值:
<param name="FlashVars" value="<c:out value="${flashVars}"/>" />
Run Code Online (Sandbox Code Playgroud)
但这看起来很丑陋,让我的IDE混乱.有没有更好的方法来获得相同的结果?
我正在尝试使我的iPhone应用程序可访问.部分内容涉及为时间和日期部分生成可访问的VoiceOver标签NSDate
.如何NSDate
以可访问的方式格式化,以便VoiceOver支持的所有语言都能正常工作?
我是Haskell的新手(仍在努力完全理解monads).我有一个问题,我有一个树状的结构
type Tree = [DataA]
data DataA = DataA1 [DataB]
| DataA2 String
| DataA3 String [DataA]
deriving Show
data DataB = DataB1 [DataA]
| DataB2 String
| DataB3 String [DataB]
deriving Show
Run Code Online (Sandbox Code Playgroud)
我想要做的是能够遍历这个并生成一个带过滤器的新树.例如,我可能想要将树中的所有DataB2更改为"foo".
我已经看到了树在同一数据部分中的示例,并且构造函数是相似的.
在python世界中,我只是遍历列表,匹配我需要的任何东西,并替换值.
在Haskell中我猜我需要能够复制我的树,但是你如何处理隐藏在构造函数和不同数据类型中的列表?
试图找出我在这里做错了什么.尝试了几件事,但我从未在屏幕上看到那个难以捉摸的矩形.现在,这就是我想做的 - 只需在屏幕上绘制一个矩形.
我在除CGContextSetRGBFillColor()之外的所有内容上都获得了"无效上下文".在那之后获得上下文对我来说似乎有点不对,但我不在家看着我昨晚使用的例子.
我也搞砸了别的东西吗?我真的很想今晚完成这么多工作......
- (id)initWithCoder:(NSCoder *)coder
{
CGRect myRect;
CGPoint myPoint;
CGSize mySize;
CGContextRef context;
if((self = [super initWithCoder:coder])) {
NSLog(@"1");
currentColor = [UIColor redColor];
myPoint.x = (CGFloat)100;
myPoint.y = (CGFloat)100;
mySize.width = (CGFloat)50;
mySize.height = (CGFloat)50;
NSLog(@"2");
// UIGraphicsPushContext (context);
NSLog(@"3");
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, currentColor.CGColor);
CGContextAddRect(context, myRect);
CGContextFillRect(context, myRect);
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
谢谢,
肖恩.