标签: operator-precedence

"在不使用第三个变量的情况下交换两个变量的值"中的潜在问题

我最近提出了这种方法来交换两个变量的值而不使用第三个变量.

a^=b^=a^=b

但是当我在不同的编译器上尝试上面的代码时,我得到了不同的结果,有些给出了正确的结果,有些则没有.

代码有什么严重错误吗?

c c++ swap operator-precedence

19
推荐指数
4
解决办法
4772
查看次数

函数参数和默认参数的评估顺序

我最近碰到了以下情况:

#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

19
推荐指数
2
解决办法
1502
查看次数

使用ruby splat运算符在哪里合法?

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在哪里可以出现在表达式中?

ruby arrays syntax operator-precedence splat

18
推荐指数
2
解决办法
9441
查看次数

在子集函数和逻辑运算符中使用多个条件

如果我想在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)

但我希望能够通过逻辑运算符选择数据,所以:为什么第一种方法不起作用?

r subset operator-precedence logical-operators

18
推荐指数
2
解决办法
6万
查看次数

重新排序因子会产生不同的结果,具体取决于加载的包

我想创建一个条形图,其中条形按高度排序,而不是按类别按字母顺序排列.当我加载的唯一包是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)

namespaces r masking operator-precedence

18
推荐指数
1
解决办法
870
查看次数

Haskell Precedence:Lambda和运算符

我发现优先级和关联性是一个很大的障碍,让我理解语法乍看之下对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 >> =).

但是没有信息 - >因为它不是运营商.

你们中的某些人可以提供一些参考来使这个语法更容易掌握吗?

grammar haskell operator-precedence

18
推荐指数
2
解决办法
1359
查看次数

为什么Javascript运算符"&&"如此奇怪?

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)

为什么一个陈述是对的,但另一个陈述是错的?

javascript google-chrome operator-precedence

18
推荐指数
3
解决办法
1245
查看次数

C++断言:断言宏中表达式的优先级

在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)

有谁能解释为什么?

c++ assert operator-precedence c-preprocessor

18
推荐指数
2
解决办法
945
查看次数

运营商的优先级:>和==

我试图猜测哪个运营商具有优先权:( >大于)或==(相等).这是我的实验:

>>> 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的第一个代码是如何解决的?

python boolean operators operator-precedence

18
推荐指数
1
解决办法
583
查看次数

覆盖类路径中的默认hadoop jar

我已经看到很多方法使用用户类路径作为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冲突造成的.

hadoop jar classpath operator-precedence

17
推荐指数
1
解决办法
2万
查看次数