标签: ternary-operator

为什么我的三元表达不起作用?

我试图设置一个标志来显示或隐藏页面元素,但即使表达式为false,它也总是显示.

$canMerge = ($condition1 && $condition2) ? 'true' : 'false';
...
<?php if ($canMerge) { ?>Stuff<?php } ?>
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

php ternary-operator

24
推荐指数
1
解决办法
740
查看次数

来自initializer_list的三元运算符+ C++ 11构造函数

在开发应用程序时,我遇到了以下问题.我想std::list<string>在给定的函数指针为null时返回空,否则返回该函数的结果.这是我的代码的简化版本:

typedef std::list<std::string> (*ParamGenerator)();

std::list<std::string> foo() {
    /* ... */
    ParamGenerator generator = ...;
    if(generator)
        return generator();
    else
        return {};
}
Run Code Online (Sandbox Code Playgroud)

但是,我通常喜欢?:在这些情况下使用ternary()运算符,所以我尝试这样使用它(像往常一样):

return generator ? generator() : {};
Run Code Online (Sandbox Code Playgroud)

但得到了这个错误:

somefile.cpp:143:46: error: expected primary-expression before ‘{’ token
somefile.cpp:143:46: error: expected ‘;’ before ‘{’ token
Run Code Online (Sandbox Code Playgroud)

这是否意味着我不能使用三元运算符来返回使用其构造函数创建的对象initializer_list?这有什么特别的原因吗?

c++ constructor ternary-operator initializer-list c++11

24
推荐指数
2
解决办法
3960
查看次数

一个有点痛苦的三重嵌套三元运算符

我查看了Raphael.js源代码,了解他如何将RGB值转换为HSB.我发现了他所做的功能,当我碰到这个漂亮的三嵌套三元运算符时,我正在将它转换为Python:

H = (C == 0 ? null :
    V == r ? (g - b) / C :
    V == g ? (b - r) / C + 2 :
             (r - g) / C + 4
    );
Run Code Online (Sandbox Code Playgroud)

它引发了我一个循环,因为Python没有Javascript所做的那种三元运算符.我花了一段时间查看它并最终将这个有点理智的代码(仅使用if/else)从中删除:

if (C == 0) {
    H = null;
} else {
    if(V == r) {
        H = (g - b) / C;
    } else {
        if(V == g) {
            H = (b - r) / C + 2; …
Run Code Online (Sandbox Code Playgroud)

javascript if-statement ternary-operator

24
推荐指数
5
解决办法
4万
查看次数

使用三元运算符返回语句

c我可以做的事情:

int minn(int n, int m){
 return (n<m)? n:m
}
Run Code Online (Sandbox Code Playgroud)

但是在python中我无法实现相同的目标:

def minn(n,m):
    return n if n<m else return m
Run Code Online (Sandbox Code Playgroud)

这给了 Syntax Error

我知道我可以这样做:

def minn(n,m):
    return min(n,m)
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不能在python中使用三元运算符.

python ternary-operator

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

语句'int val =(++ i&gt; ++ j)吗?++ i:++ j;`调用未定义的行为?

给定以下程序:

#include <stdio.h>
int main(void)
{
    int i = 1, j = 2;
    int val = (++i > ++j) ? ++i : ++j;
    printf("%d\n", val); // prints 4
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

的初始化val似乎可能隐藏了一些未定义的行为,但是我看不到对象被多次修改或在其间没有序列点的情况下被修改和使用的任何地方。有人可以对此进行纠正或证实吗?

c ternary-operator sequence-points

24
推荐指数
3
解决办法
1655
查看次数

三元运营商:糟糕或良好的做法?

我正在寻找使用/不使用它的理由和原创想法(在使用和替换它们时).


重复:

相关(但没有解决被问到的问题):

ternary-operator

23
推荐指数
4
解决办法
4万
查看次数

在三元运算符语句中排除"意外的T_ECHO"故障

($DAO->get_num_rows() == 1) ? echo("is") : echo("are");
Run Code Online (Sandbox Code Playgroud)

这个剂似乎对我不起作用,我得到一个错误"意外的T_ECHO".我期待它回应'是'或'是'.

我试过没有条件周围的括号.我不能以这种方式使用三元运算符吗?

$DAO->get_num_rows()返回的整数值.

php ternary-operator

23
推荐指数
2
解决办法
8478
查看次数

使用三元运算符时,您可以通过引用传递吗?

简单的问题,简单的代码.这有效:

$x = &$_SESSION['foo'];
Run Code Online (Sandbox Code Playgroud)

这不是:

$x = (isset($_SESSION['foo']))?&$_SESSION['foo']:false;
Run Code Online (Sandbox Code Playgroud)

它抛出PHP Parse error: syntax error, unexpected '&'.使用条件运算符时是否无法通过引用传递,为什么不呢?如果?和之间有空格也会发生&.

php ternary-operator

23
推荐指数
2
解决办法
2459
查看次数

JavaScript三元运算符和JSLint中的表达式

我最近收到了一篇关于JSLint的博客文章的评论,询问JSLint为什么会抛出以下错误:

s === "test" ? MyFunc() : MyFunc2();
Run Code Online (Sandbox Code Playgroud)

生成的错误是:

"期待一个任务或函数调用,而是看到一个表达式."

很明显,JSLint期待在这里进行任务,更像是:

var y = (s === "test") ? MyFunc() : MyFunc2();
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到第一个例子的问题.是否真的应该将三元运算符用于指派?

我在JSLint.com上看不到任何东西,在JavaScript:The Good Parts一书中也没有任何明显的东西.并且,社区fork JSHint中也报告了相同的错误.

任何人?

javascript jslint ternary-operator jshint

23
推荐指数
1
解决办法
8551
查看次数

在C++中创建对三元运算符结果的const引用是否安全?

这段代码中有一些非常明显的事情:

float a = 1.;

const float & x = true ? a : 2.; // Note: `2.` is a double

a = 4.;

std::cout << a << ", " << x;
Run Code Online (Sandbox Code Playgroud)

clang和gcc输出:

4, 1
Run Code Online (Sandbox Code Playgroud)

人们会天真地期望两次打印相同的值,但事实并非如此.这里的问题与参考无关.有一些有趣的规则决定了它的类型? :.如果两个参数的类型不同并且可以进行转换,则它们将使用临时的.该引用将指向临时的? :.

上面的示例编译得很好,在编译时可能会也可能不会发出警告,-Wall具体取决于编译器的版本.

这是一个例子,说明在看似合法的代码中出错这么容易:

template<class Iterator, class T>
const T & min(const Iterator & iter, const T & b)
{
    return *iter < b ? *iter : b;
}

int main()
{
    // Try to remove the const …
Run Code Online (Sandbox Code Playgroud)

c++ gcc ternary-operator c++11 clang++

23
推荐指数
1
解决办法
1341
查看次数