myCol
和-=
运算符到底是做什么的?
还是它们是隐式的,因为它们是按类型定义的?
我已经广泛使用了它们,这是语法的一个非常简单的功能,但是我从未想过它的工作原理。
问题产生了什么
我可以像这样连接一个字符串值:
var myString = "hello ";
myString += "world";
一切都很好。 但是,为什么这不适用于收藏夹呢?
var myCol = new List<string>();
myCol += "hi";
您可能会说:“您正在尝试附加其他类型,不能将字符串附加到非字符串类型中”。 但是以下方法也不起作用:
var myCol = new List<string>();
myCol += new List<string>() { "hi" };
好的,也许它不适用于集合,但是以下内容不是事件处理程序的(某种)集合吗?
myButton.Click += myButton_Click;
我显然对这些操作员的工作方式缺乏深入的了解。
请注意:我不是在实际项目中尝试以此方式构建集合myCol
。 我只是对这个运算符的运作感到好奇,这是假设的。
我说的是这个模块:[http://docs.python.org/library/operator.html]
从文章:
操作员模块导出一组 用C实现的功能 对应于内在 Python的运算符。 例如, operator.add(x,y)等效于 表达式x + y。 函数名称 是那些用于特殊阶层的人 方法; 没有前导和的变体 还提供了尾随__ 方便。
我不确定我是否了解此模块的好处或目的。
::
具有2种方法,可以指定将元素添加到(不可变)列表的前面:
::
(实现List
),和::
(仅在List
中定义)::
技术上具有更通用的类型签名-
def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That
def ::[B >: A](x: B): List[B]
-但忽略了隐式,根据doc消息,仅要求::
为List
,则签名是等效的。
::
和List
和有什么不一样? 如果它们实际上是相同的,则我认为应该避免使用::
,具体取决于List
的具体实现。但是为什么要定义另一个公共方法,客户端代码何时调用它?
还有一个用于模式匹配的::
的提取器,但是我想知道这些特殊的方法。
另请参阅:Scala列表串联,::: vs ++
我总是称其为“箭头运算符”,但我确信它具有正式名称。 我很快浏览了C ++标准,却没有看到它的名字。
可能重复:
|| =操作符在红宝石中代表什么?
我对在Rails中使用||=
运算符感到困惑。 我在网络上找不到任何有用的信息。 谁能指导我?
请让我知道您是否知道任何网络链接。
我希望以下陈述意味着什么:
@_current_user ||= session[:current_user_id] &&
User.find(session[:current_user_id])
基本上是标题中的问题。 我正在看MVC 2源代码:
[Flags]
public enum HttpVerbs {
Get = 1 << 0,
Post = 1 << 1,
Put = 1 << 2,
Delete = 1 << 3,
Head = 1 << 4
}
而我只是对双左角2979182585387156156480的功能感到好奇。
(OrElse和Or)和(AndAlso和And)有什么区别?他们的表现有什么不同,可以说正确性好处吗? 有没有我不应该使用OrElse和AndAlso的情况?
我正在创建所有语言的下拉列表。 列表的默认语言选择将由用户添加的信息决定:
<select>
<c:forEach items="${languages}" var="lang">
<c:choose>
<c:when test="${lang}.equals(${pageLang})">
<option value="${lang}" selected>${lang}</option>
</c:when>
<c:otherwise>
<option value="${lang}">${lang}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
.equals
在EL中似乎不存在。 看过这里,建议我编写自己的函数,然后导入并使用它。 因为这仅仅是此页面的一件小事,所以我不想为此而开始创建库等。 我也不想开始为servlet创建专家对象以返回其中的额外信息。
我唯一想做的就是从Servlet中返回整个选项行的实际html,而不仅仅是返回语言字符串,但这使我感到很丑陋,所以我希望有一个更优雅的解决方案。
快速解决比较EL中两个字符串的最佳方案是什么?
J2EE 1.4教程
说我有一个清单l
。在什么情况下会呼叫l.__rmul__(self, other)
?
我基本上理解了文档,但是我也想看到一个示例来毫无疑问地阐明其用法。
如果您在此处的jQuery -2
页上阅读了注释,则会有一个有趣的声明:
!!~jQuery.inArray(elm, arr)
现在,我相信双感叹号会将结果转换为true
类型的值true
。我不知道在所有这些中使用代字号(~
)的运算符是什么?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
重构-2
语句:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
分解:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
我还注意到,如果将波浪号放在前面,结果是-2
。
~!!~jQuery.inArray("one", arr) // -2
我不明白这里的波浪符号的目的。 有人可以解释一下还是将我指向资源?
据我所知,+ op for list仅要求第二个操作数是可迭代的,“ ha”显然是可迭代的。
在代码中:
>>> x = []
>>> x += "ha"
>>> x
['h', 'a']
>>> x = x + "ha"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
使用类似的东西之间是否有任何性能差异
for(int i = 0; i < 10; i++) { ... }
和
for(int i = 0; i < 10; ++i) { ... }
还是编译器能够以在功能上等效的情况下使它们同样快的方式进行优化?
编辑:有人问这个问题是因为我与同事进行了讨论,而不是因为我认为从任何实际意义上讲它都是有用的优化。 它主要是学术性的。
我今天用一些C代码遇到了=+
,而不是标准的+=
。 我不太确定这是怎么回事。 我也在文档中找不到它。
例如:
$sql = <<<MySQL_QUERY
这个问题已经在这里有了答案:
在PHP中检查非相等性(不检查类型),您可以这样做:
if( A != B ) {
DO SOMETHING;
}
但是您也可以这样做,结果是一样的:
if( A <> B ) {
DO SOMETHING;
}
有什么区别吗?
在<>
上使用!=
是否会以任何方式,形状或形式更改评估?
我感到很困惑的一件事是知道我可以在方法和变量名中使用哪些字符和组合。 例如
val #^ = 1 // legal
val # = 1 // illegal
val + = 1 // legal
val &+ = 1 // legal
val &2 = 1 // illegal
val £2 = 1 // legal
val ¬ = 1 // legal
据我了解,字母数字标识符和运算符之间是有区别的。 您可以将一个匹配项或另一个匹配项混合在一起,但不能同时混合两者,除非用下划线(混合标识符)分隔。
从Scala中的编程第6.10节中,
操作员标识符由一个或多个操作员字符组成。 操作符是可打印的ASCII字符,例如+,:,?,〜 要么 #。
更准确地说,运算符属于Unicode集 数学符号(Sm)或其他符号(So)或7位 不是字母,数字,括号,正方形的ASCII字符 方括号,花括号,单引号或双引号或下划线, 句号,分号,逗号或反斜杠字符。
因此,我们无法使用+
和`
我在Wikipedia上查找了Unicode数学符号,但是发现的却不包括+
、:
、?
等。在运算符字符的确切位置上是否有明确的列表?
还有,为什么Unicode数学运算符(而不是符号)不算作运算符?
查看此问题并尝试一些代码:
int x = 100;
while ( 0 <-------------------- x )
{
printf("%d ", x);
}
我尝试使用g++
进行编译,但出现以下错误:
file.c: In function 'main':
file:c:10:27: error: lvalue required as decrement operand
while ( 0 <-------------------- x )
但是使用g++
进行编译即可。 为什么此代码在C ++中有效,但在C中无效?
我有一张地图来统计文件中单词的出现。我正在从文件中读取单词,每次读取单词时,我都想这样做:
map[word]++; //(where map is the name of my map, I'm not using map as a name of course)
因此,如果我的地图已经具有“单词”作为键,则将其递增,否则将创建新的键并将其递增。
这是我担心的地方:如果我在新键上执行map [word] ++(在读取的第一个单词中是不可避免的),我的程序会因为我的map中的int被统一化而崩溃吗?如果是这样,告诉地图的最有效方法是:如果单词已经存在,则在值上执行++,否则,创建值= 1的新键?在此处使用带有'map.find'的if语句似乎不必要地多余,您认为呢?
谢谢
Function Foo(thiscell As Range) As Boolean
Foo = thiscell.hasFormula And (InStr(1, UCase(Split(thiscell.formula, Chr(40))(0)), "bar") > 0)
End Function
存在此函数的目的是测试(之前)是否存在某个子字符串(在这种情况下为bar)。
我遇到问题的情况是当传递给函数的单元格为空时,thisCell.hasFormula为false,但是and之后的语句仍在评估中。 这使我在运行时出现下标超出范围错误。
即使第一个为假,VBA仍会继续评估And的第二个参数吗?