我要用之前的一个问题来引导这个问题:
LINQ to SQL:多个连接在多个列上.这可能吗?
所以我有一个LINQ查询:
var query =
from t1 in myTABLE1List // List<TABLE_1>
join t2 in myTABLE1List
on new { t1.ColumnA, t1.ColumnB } equals new { t2.ColumnA, t2.ColumnB }
join t3 in myTABLE1List
on new { t2.ColumnA, t2.ColumnB } equals new { t3.ColumnA, t3.ColumnB }
select new {t1.ColumnA, t2.ColumnA, t3.ColumnA } // Duplicate Anon type 'ColumnA'
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
Java允许接口中的字段.这在java 5之前有一些用处.今天它们有什么好的用例吗?
有人可以给我一些很好的用例,其中一个人会在接口中使用字段而不是其他许多方法来满足相同的设计要求吗?
实际上,界面允许在某些情况下出现歧义和混淆.以此为例.以下代码:
请注意,我承认之前已经讨论过歧义问题并得到了回答,但这不是我的问题.我的问题在上面以粗体显示.这只是界面中字段的一个潜在副作用的说明.
public class Sample implements Foo,Bar{
public void print() {
System.out.println("Hello"+name);//field name is ambiguous
}
public static void main(String[] args) {
Sample mySample = new Sample();
mySample.print();
}
}
public interface Foo {
String name = "foo";
}
public interface Bar{
String name = "bar";
}
Run Code Online (Sandbox Code Playgroud) #include <iostream>
using namespace std;
void x(int a,int b){
cout<<"int int"<<endl;
}
void x(char a,char b){
cout<<"char char"<<endl;
}
int main() {
int a =2;char c ='a';
x(a,c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 apple clang 编译器中对“x”的调用不明确,为什么?
对于 x(int,int),第一个参数是直接匹配,第二个是对 x(char, char) 的提升,第一个参数是我知道的标准转换,也根据这个答案-> https://stackoverflow.com /a/28184631/13023201
并且提升应该优先于 std 转换,然后应该调用 x(int,int) 。那为什么会这么暧昧呢??
void outputString(const string &ss) {
cout << "outputString(const string& ) " + ss << endl;
}
void outputString(const string ss) {
cout << "outputString(const string ) " + ss << endl;
}
int main(void) {
//! outputString("ambigiousmethod");
const string constStr = "ambigiousmethod2";
//! outputString(constStr);
} ///:~
Run Code Online (Sandbox Code Playgroud)
如何进行明确的通话?
编辑:这段代码可以用g ++和MSVC编译.
谢谢.
我是Oracle 10g用户.我不得不写一些SQL查询,并发现了一个神秘的(我看到它)行为.让我们假设我们有一个表,它可以加入某种简单的两级树结构.下一个查询给出了"歧义错误",这是预期的:
select title
from table1
left join table1 on condition
Run Code Online (Sandbox Code Playgroud)
但如果我要在连接中再添加一个表,那么歧义问题就会消失:
select title
from table1
join table2 on other_condition
left join table1 on condition
Run Code Online (Sandbox Code Playgroud)
对此有何解释?我完全想念它......完整的测试用例可以在http://pastebin.com/webf513w找到
采用以下类和两个对象定义:
class Rect{
public:
enum centimeter;
enum meter;
Rect(double len,double wid,enum centimeter){
length=(len/100);
width=(wid/100);
}
Rect(int len,int wid,enum meter){
length=len;
width=wid;
}
//rest of implementation
private:
double length;//in meters
double width;//in meters
};
Rect obj1(10,5,Rect::centimeter());
Rect obj2(10,5,Rect::meter());
Run Code Online (Sandbox Code Playgroud)
两个先前的构造函数具有伪枚举参数,以解决在这些伪参数不存在的情况下引起的调用歧义.现在尽管有可能在这里使用命名构造函数,如果我坚持使用这些虚拟参数,这是否违反了我应该注意的任何编码规则?
我有一个函数(和一个构造函数),应该能够取整数和浮点值.事实上,我希望它采取一个int64_t或一个long double,所以我想要的是,
class Foo {
public:
Foo(int64_t value=0);
Foo(long double value);
};
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,并尝试Foo f = 1;编译器抱怨从转换int到Foo是不明确的.好的,但是如果我改变第一个构造函数来取一个int32_t没有这种歧义.任何人都可以向我解释为什么会这样.
编辑:发布我自己的答案,保留原来接受的答案...让我思考别名.
编辑:我的问题是针对在SFINAE(或其他)上下文中区分模糊性与成员var/func存在的可能性.我的问题不是关于如何制作一个has_member模板,而是关于检测模糊与存在之间的区别
是否有可能设置部分特化,以区分何时以不明确的方式访问成员(派生类的基础都具有成员)vs成员是否存在(派生类的基础都不具有成员) ?我只有在检测到歧义时才需要返回true ,但如果根本没有成员,或者只存在一个类,则需要返回true .这是我到目前为止所返回的,它对于模糊性(我想要的)返回true,对于只有一个具有该成员的类(也是我想要的)返回false,但如果两个类都没有该成员则返回true(argh!)
//for the sake of this example, ClassOne comes from a lib I don't control
struct ClassOne {
//some unknown members in here...
};
struct ClassTwo {
string member_var;
};
template<typename A>
struct helper : std::true_type {};
template<typename A, typename B>
struct merged_class : public A, public B {};
template<typename T, typename = void>
struct has_member_var : std::true_type {
//Member request ambiguous or neither class has member.
//I want to catch …Run Code Online (Sandbox Code Playgroud) 我对汇编语言有点新意,并且难以理解术语"字节等效".
它用于以下上下文: -
MOV指令有时会导致歧义.例如,查看语句:
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
MOV [EBX], 110 ; MY_TABLE[0] = 110
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚是否要移动数字等效的字节或等效数字110.在这种情况下,使用类型说明符是明智的.
这个教程的链接就在这里
这将是一个很大的帮助,如果任何人都可以解释字节相当于术语,并用清晰的情况,即"类型说明符"可以派上用场提供.
给出以下代码:
import Data.Word
data T = T deriving (Eq, Show)
class C a where f :: a -> ()
instance C T where f _ = ()
instance C Word16 where f _ = ()
main = return $ f 0x16
Run Code Online (Sandbox Code Playgroud)
GHC抱怨它无法推断文字的类型0x16应该与错误:
No instance for (Num a0) arising from the literal ‘22’
The type variable ‘a0’ is ambiguous
Run Code Online (Sandbox Code Playgroud)
很容易理解为什么会这样--Haskell允许数字文字属于具有实例的任何类型Num,并且在这里我们不能消除文字0x16(或22)应该是什么类型的歧义.
它也很清楚,作为一个人类阅读我想要做的事情 - 只有一个类可用的实例C满足Num约束,所以显然我打算使用那个,所以0x16应该被视为一个Word16.
我知道有两种方法可以修复它:使用其类型注释文字:
main = return …Run Code Online (Sandbox Code Playgroud)