我有一个尺寸限制的盒子,应该包含一些文字:
.box {
width: 100px;
height: 40px;
background-color: yellow;
}Run Code Online (Sandbox Code Playgroud)
<div class="box">
Some text goes here.
</div>Run Code Online (Sandbox Code Playgroud)
但是,如果文本太长而无法放入框中,我想用不同的较短版本替换该文本,这是我事先准备好的.
例如,如果我想用这两个名称填充两个框:
Short version Long version
------------------------------------------------------------
Rudolf E. Raspe Rudolf Erich Raspe
Baron Munchausen Hieronymus Karl Friedrich von Munchhausen
Run Code Online (Sandbox Code Playgroud)
然后第一个盒子将包含"Rudolf Erich Raspe",因为它足够短以适应内部,但第二个盒子将包含"Baron Munchausen",因为Baron的全名太长而不适合.
如何使用HTML5和CSS3设置这样的盒子?浏览器兼容性很重要,但我不需要在11之前容纳真正的旧版本或Internet Explorer.
我可以选择任何标准选项来处理太长的文本 - 让它溢出,或通过切割overflow: hidden,或添加滚动条,或添加省略号,或任何其他标准解决方案.但由于我已经有了每个可能的文本的简短版本,我想用它们代替.
我可以在JavaScript中执行此操作,例如,使用包装器并将其大小与盒子进行比较.但如果可能的话,我想要一个非JavaScript解决方案.
到目前为止,我想过如果文本太长(白色空间和自动换行的某种组合?),文本会以某种方式将自身向下推,使容器溢出:隐藏在隐藏它的时候隐藏它,并放置短版本它背后的文字,但我仍然无法让它工作,同时仍然允许文本占用多行.
另一种方法是在元素下面放置一个带有长文本的短文本的元素,并使用一些变换,这使得短元素在被推下太多时接管......但是我无法使它工作.
那么......还有其他想法吗?
我正在通过ExecutorService运行一些外部方法的多次调用.我希望能够中断这些方法,但遗憾的是它们不会自行检查中断标志.有什么办法可以强制从这些方法中引发异常吗?
我知道从任意位置抛出异常是有潜在危险的,在我的具体情况下,我愿意抓住这个机会并准备应对后果.
"外部方法"我的意思是来自外部库的一些方法,我不能修改它的代码(我可以,但是每当新版本发布时,这将使它成为维护的噩梦).
外部方法计算成本高,不受IO限制,因此它们不响应常规中断,我无法强行关闭通道或套接字等.正如我之前提到的,他们也没有检查中断标志.
代码在概念上类似于:
// my code
public void myMethod() {
Object o = externalMethod(x);
}
// External code
public class ExternalLibrary {
public Object externalMethod(Object) {
innerMethod1();
innerMethod1();
innerMethod1();
}
private void innerMethod1() {
innerMethod2();
// computationally intensive operations
}
private void innerMethod2() {
// computationally intensive operations
}
}
Run Code Online (Sandbox Code Playgroud)
Thread.stop()理论上我会做我想要的,但它不仅被弃用,而且它也只适用于实际线程,而我正在使用执行器任务(也可能与未来任务共享线程,例如在线程池中工作时) .然而,如果找不到更好的解决方案,我将转换我的代码以使用老式的Threads并使用此方法.
我尝试过的另一个选择是myMethod()使用特殊的"Interruptable"注释标记和类似的方法,然后使用AspectJ(我无疑是新手)来捕获所有方法调用 - 类似于:
@Before("call(* *.*(..)) && withincode(@Interruptable * *.*(..))")
public void checkInterrupt(JoinPoint thisJoinPoint) {
if (Thread.interrupted()) …Run Code Online (Sandbox Code Playgroud) 检查UTF-16和UTF-8的属性,我找不到任何理由更喜欢UTF-16.
但是,检查Java和C#,它看起来像字符串和字符默认为UTF-16.我认为这可能是出于历史原因,或者出于性能原因,但无法找到任何信息.
谁知道为什么这些语言选择了UTF-16?我也有正当理由这么做吗?
编辑:同时我也找到了这个答案,这似乎是相关的,并有一些有趣的链接.
重写方法时,C++和Java支持返回类型协方差.
但是,它们都不支持参数类型的反差 - 相反,它转换为过载(Java)或隐藏(C++).
那是为什么?在我看来,允许这样做是没有害处的.我可以在Java中找到它的一个原因 - 因为它无论如何都有"选择最特定版本"的重载机制 - 但是不能想到C++的任何原因.
示例(Java):
class A {
public void f(String s) {...}
}
class B extends A {
public void f(Object o) {...} // Why doesn't this override A.f?
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,似乎类C无法访问A的构造函数,这是因为虚拟继承所必需的.然而,代码仍然编译和运行.它为什么有效?
class A {};
class B: private virtual A {};
class C: public B {};
int main() {
C c;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此外,如果我从A中删除默认构造函数,例如
class A {
public:
A(int) {}
};
class B: private virtual A {
public:
B() : A(3) {}
};
Run Code Online (Sandbox Code Playgroud)
然后
class C: public B {};
Run Code Online (Sandbox Code Playgroud)
会(意外地)编译,但是
class C: public B {
public:
C() {}
};
Run Code Online (Sandbox Code Playgroud)
不会像预期的那样编译.
使用"g ++(GCC)3.4.4(cygming special,gdc 0.12,使用dmd 0.125)编译的代码",但已经验证它与其他编译器的行为相同.
c++ inheritance encapsulation virtual-inheritance private-inheritance
我手里拿着一个Type*.如何以位/字节找出其大小(此类型的大小对象将占用内存)?我看到各种方法允许我获得"原始"或"标量"大小,但这不会帮助我使用聚合类型...
来自Eclipse,我对Visual Studio为C#提供的非常有限的语法着色功能感到失望(所有版本,直到2010年).
特别是,我对方法/字段/本地/静态内容的不同着色感兴趣.
我知道Visual Assist可以增强着色,但是我没有找到任何能够做到这一点的免费替代品,所以我转向SO(我希望它与编程有关).是否有任何免费(或至少比Visual Assist便宜)的解决方案能够增强C#的语法着色?
我正在尝试设置一个传递,它将在main的开头插入几个全局变量以及几个函数调用.但是,我认为我在正确设置功能描述时遇到问题.我的代码编译,但当我尝试运行传递时,我收到此错误:
void llvm::CallInst::init(llvm::Value*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&):
Assertion `(Args.size() == FTy->getNumParams() || (FTy->isVarArg() && Args.size() > FTy-
>getNumParams())) && "Calling a function with bad signature!"' failed.
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止编写的代码:
#include "llvm/IR/Instructions.h"
#include "llvm/Pass.h"
#include "llvm/Support/InstIterator.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Module.h"
using namespace llvm;
namespace{
struct fun_insert : public FunctionPass{
static char ID;
fun_insert():FunctionPass(ID){}
virtual bool runOnFunction(Function &F){
if (F.getName() == "main"){
for (inst_iterator I = inst_begin(F), E= inst_end(F); …Run Code Online (Sandbox Code Playgroud) 我在Ubuntu上使用Eclipse 3.7.通常,在编辑文件后,我无法保存它 - "保存"选项在菜单中显示为灰色并且Ctrl+ s似乎什么都不做,即使文件刚刚被修改并且编辑器在文件名之前显示星号标题页眉.
将活动选项卡更改为另一个文件,然后返回到第一个文件"解锁"保存选项,然后我可以选择该选项.
导致此行为的原因是什么,我该如何解决?
我正在使用一个任性的库,不幸的是,它会System.out(或偶尔System.err)打印信息.防止这种情况最简单的方法是什么?
我一直在考虑创建一个输出流到内存,替换,System.out并err在每次调用其中一个故障排除方法之前,稍后恢复它们,然后忽略创建的流的缓冲区.有更简单,更优雅的方式吗?
编辑:我不想重定向所有输出 - 这很容易实现.我只想忽略某些库调用可能产生的输出.