我最近提出了这种方法来交换两个变量的值而不使用第三个变量.
a^=b^=a^=b
但是当我在不同的编译器上尝试上面的代码时,我得到了不同的结果,有些给出了正确的结果,有些则没有.
代码有什么严重错误吗?
我最近碰到了以下情况:
#include <iostream>
int *p = 0;
int f() {
p = new int(10);
return 0;
}
void g(int x, int *y = p) {
std::cout << y << std::endl;
}
int main() {
g(f());
}
Run Code Online (Sandbox Code Playgroud)
这非常微妙,因为您通常不希望默认参数在评估函数调用期间发生变化.我不得不看一下程序集来发现这个错误.
现在我的问题是:这是否真的是未定义的行为,因为对函数参数的评估顺序没有任何保证?
c++ operator-precedence undefined-behavior default-parameters
Splats很酷.它们不只是用于爆炸阵列,尽管这很有趣.它们还可以转换为数组并展平数组(请参阅http://github.com/mischa/splat/tree/master以获取他们所做的详尽列表.)
看起来无法对splat执行其他操作,但在1.8.6/1.9中,以下代码抛出"意外的tSTAR":
foo = bar || *zap #=> unexpected tSTAR
虽然这有效:
foo = *zap || bar #=> works, but of limited value
splat在哪里可以出现在表达式中?
如果我想在R中选择数据子集,我可以使用子集函数.我想基于与少数几个标准匹配的数据进行分析,例如,某个变量是1,2或3.我尝试过
myNewDataFrame <- subset(bigfive, subset = (bigfive$bf11==(1||2||3)))
Run Code Online (Sandbox Code Playgroud)
它总是只选择与第一个标准匹配的值,这里1.我的假设是它将从1开始,如果它的评估为"false",它将继续到2而不是3,如果没有匹配==之后的语句为"false",如果其中一个匹配,则为"true".
我得到了正确的结果
newDataFrame <- subset(bigfive, subset = (bigfive$bf11==c(1,2,3)))
Run Code Online (Sandbox Code Playgroud)
但我希望能够通过逻辑运算符选择数据,所以:为什么第一种方法不起作用?
我想创建一个条形图,其中条形按高度排序,而不是按类别按字母顺序排列.当我加载的唯一包是ggplot2时,这工作正常.但是,当我加载一些包并运行创建,排序和绘制数据框的相同代码时,条形图已经恢复为按字母顺序排序.
我每次使用都检查了数据帧str(),结果发现数据框的属性现在不同了,即使我每次都运行相同的代码.
我的代码和输出如下所示.任何人都可以解释不同的行为吗?为什么加载一些显然不相关的包(在我所使用的所有函数似乎都没有被新加载的包掩盖的意义上无关)会改变运行transform()函数的结果?
案例1:刚加载ggplot2
library(ggplot2)
group = c("C","F","D","B","A","E")
num = c(12,11,7,7,2,1)
data = data.frame(group,num)
data1 = transform(data, group=reorder(group,-num))
> str(data1)
'data.frame': 6 obs. of 2 variables:
$ group: Factor w/ 6 levels "C","F","B","D",..: 1 2 4 3 5 6
..- attr(*, "scores")= num [1:6(1d)] -2 -7 -12 -7 -1 -11
.. ..- attr(*, "dimnames")=List of 1
.. .. ..$ : chr "A" "B" "C" "D" ...
$ num : num 12 11 7 7 2 1 …Run Code Online (Sandbox Code Playgroud) 我发现优先级和关联性是一个很大的障碍,让我理解语法乍看之下对haskell代码的表达.
例如,
blockyPlain :: Monad m => m t -> m t1 -> m (t, t1)
blockyPlain xs ys = xs >>= \x -> ys >>= \y -> return (x, y)
Run Code Online (Sandbox Code Playgroud)
通过实验,我终于明白了,
blockyPlain xs ys = xs >>= (\x -> (ys >>= (\y -> return (x, y))))
Run Code Online (Sandbox Code Playgroud)
代替
blockyPlain xs ys = xs >>= (\x -> ys) >>= (\y -> return (x, y))
Run Code Online (Sandbox Code Playgroud)
其作用如下:
*Main> blockyPlain [1,2,3] [4,5,6]
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
Run Code Online (Sandbox Code Playgroud)
我可以从ghci获取信息(>> =)作为运算符,(infixl 1 >> =).
但是没有信息 - >因为它不是运营商.
你们中的某些人可以提供一些参考来使这个语法更容易掌握吗?
a = 1;
b = "1";
if (a == b && a = 1) {
console.log("a==b");
}
Run Code Online (Sandbox Code Playgroud)
上面的Javascript代码会导致if Google Chrome 26.0.1410.43 中的语句出错:
未捕获的ReferenceError:赋值中的左侧无效
我想这是因为该变量a在声明的第二部分&&,a=1不能分配.但是,当我尝试下面的代码时,我完全糊涂了!
a = 1;
b = "1";
if (a = 1 && a == b) {
console.log("a==b");
}
Run Code Online (Sandbox Code Playgroud)
为什么一个陈述是对的,但另一个陈述是错的?
在C++中:
assert( std::is_same<int , int>::value ); // does not compile
assert( (std::is_same<int , int>::value) ); // compiles
Run Code Online (Sandbox Code Playgroud)
有谁能解释为什么?
我试图猜测哪个运营商具有优先权:( >大于)或==(相等).这是我的实验:
>>> 5 > 4 == 1
False
Run Code Online (Sandbox Code Playgroud)
据我所知,这有两种可能的解决方案.
>>> (5 > 4) == 1
True
>>> 5 > (4 == 1)
True
Run Code Online (Sandbox Code Playgroud)
两者都没有返回False,那么Python的第一个代码是如何解决的?
我已经看到很多方法使用用户类路径作为hadoop的先例.通常,如果m/r作业需要特定版本的库,而hadoop巧合地已使用旧版本(例如jackson的json解析器或commons http等),则会执行此操作.
无论如何:我见过:
mapreduce.task.classpath.user.precedence
mapreduce.task.classpath.first
mapreduce.job.user.classpath.first
Run Code Online (Sandbox Code Playgroud)
这些参数中的哪一个是在我的作业配置中设置的正确参数,以便强制映射器和缩减器具有hadoop_classpath在hadoop默认依赖关系罐之前放置用户定义的jar 的类路径?
顺便说一句,这与这个问题有关: 我最近发现的Dynamodb requestHandler接受是由于jar冲突造成的.