我刚刚遇到一个使用AS来表示别名的SQL语句,如下所示:
SELECT all, my, stuff
FROM someTableName AS a
INNER JOIN someOtherTableName AS b
ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)
我以前看到的是:
SELECT all, my, stuff
FROM someTableName a
INNER JOIN someOtherTableName b
ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)
我假设没有区别,它只是语法糖,但其中哪一个更普遍/广泛传播?有什么理由比较喜欢一个吗?
编辑澄清:
我感谢所有答案和所有要点,但问题不是为什么或为什么不使用表别名.问题纯粹是关于对表别名使用"AS"关键字或将其遗漏.
我注意到具有必需和方法的新ExpandoObject工具因此应该可以使用集合初始化语法以与向字典添加项目相同的方式向expando对象添加属性.IDictionary<string,object>IEnumerable<KeyValuePair<string, object>>Add(string, object)
Dictionary<string,object> dict = new Dictionary<string,object>()
{
{ "Hello", "World" }
};
dynamic obj = new ExpandoObject()
{
{ "foo", "hello" },
{ "bar", 42 },
{ "baz", new object() }
};
int value = obj.bar;
Run Code Online (Sandbox Code Playgroud)
但似乎没有办法做到这一点.错误:
'System.Dynamic.ExpandoObject'不包含'添加'的定义
我认为这不起作用,因为接口是明确实现的.但有没有办法解决这个问题?这工作正常,
IDictionary<string, object> exdict = new ExpandoObject() as IDictionary<string, object>();
exdict.Add("foo", "hello");
exdict.Add("bar", 42);
exdict.Add("baz", new object());
Run Code Online (Sandbox Code Playgroud)
但是集合初始化器语法更整洁.
有一堆,因为Perl是一种非常含糖的语言,但任何语言中最常用的语句是if语句和设置值的组合.我想我发现了很多,但仍有一些差距.最终,目标是不必多次编写变量名称:
这是我到目前为止所拥有的:
$r ||= $s; # $r = $s unless ($r);
$r //= $s; # $r = $s unless (defined $r);
$r &&= $s; # $r = $s if ($r);
$r = $c ? $s : $t; # if ($c) { $r = $s } else { $r = $t }
$c ? $r : $s = $t; # if ($c) { $r = $t } else { $s = $t }
$r = $s || $t; # if ($s) …Run Code Online (Sandbox Code Playgroud) 我发现自己经常这样做:
$foo = true;
$foo = $foo && false; // bool(false)
Run Code Online (Sandbox Code Playgroud)
使用按位运算符,您可以使用&=和|=简写:
$foo = 1;
$foo &= 0; // int(0)
Run Code Online (Sandbox Code Playgroud)
鉴于按位运算1并且0在功能上等效于true和的布尔运算false,我们可以依赖于类型转换并执行以下操作:
$foo = true;
$foo &= false; // int(0)
$foo = (bool)$foo; // bool(false)
Run Code Online (Sandbox Code Playgroud)
...但是这很丑陋并且违背了使用速记赋值语法的目的,因为我们必须使用另一个语句来将类型返回到布尔值.
我真正想做的是这样的事情:
$foo = true;
$foo &&= false; // bool(false)
Run Code Online (Sandbox Code Playgroud)
......但&&=和||=无效的运营商,很明显.所以,我的问题是 - 是否有一些其他含糖的语法或者可能是一个不起眼的核心功能可以作为替身?如果变量尽可能短$foo,那么使用$foo = $foo && false语法并不是什么大问题,但是具有多个维度的数组元素和/或对象方法调用会使语法非常冗长.
我有一个带this变量的jquery对象的引用.我正在寻找一种将子选择器应用于对象的方法.
我正在使用$(this).find('table > tbody > tr > td'),但我的目标更像是$('[Value of $(this) goes here somehow] > table > tbody > tr > td').
我知道我可以做的$(this).children('table').children('tbody').children('tr').children('td'),但我想知道,如果有一些语法糖,我可以在这里使用.
我需要使用[f(char) for char in string]语法从python中的字符串构建一个列表,我希望能够忽略(不在列表中插入)f(x)的值等于None.
我怎样才能做到这一点 ?
当与数组一起使用时,编译器将foreach循环编译成类似for循环的循环foreach.并且当与or一起使用时,编译器将foreach循环编译成类似while循环的循环.那么这是否是纯粹?或者有什么复杂的东西吗?foreachIEnumerableIEnumerable<T>foreachsyntactic sugar
CLR知道foreach吗?foreach在MSIL代码中是否有专门设计的内容?
是否可以在方法名称中使用尖括号,例如:
class Foo(ind1:Int,ind2:Int){...}
var v = new Foo(1,2)
v(1) = 3 //updates ind1
v<1> = 4 //updates ind2
Run Code Online (Sandbox Code Playgroud)
真实的情况显然比这更复杂!!我试图提供一个方便的用户界面.
在Ruby中,您可以使用Array#join将多个字符串简单地连接在一起,并使用可选的分隔符.
[ "a", "b", "c" ].join #=> "abc"
[ "a", "b", "c" ].join("-") #=> "a-b-c"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个很好的语法糖与一堆布尔表达式做类似的事情.例如,我需要&&一堆表达式.但是,将使用哪些表达式由用户输入确定.所以不要做一堆
cumulative_value &&= expression[:a] if user[:input][:a]
Run Code Online (Sandbox Code Playgroud)
我想先根据输入收集所有表达式,然后将&&它们一起全部收集起来.就像是:
be1 = x > y
be2 = Proc.new {|string, regex| string =~ regex}
be3 = z < 5 && my_object.is_valid?
[be1,be2.call("abc",/*bc/),be3].eval_join(&&)
Run Code Online (Sandbox Code Playgroud)
默认情况下Ruby中是否有这样的设备?如果可能的话,我只想要一些合成糖来使代码更清洁.