我今天在一些PHP代码中看到了这个:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
Run Code Online (Sandbox Code Playgroud)
我不熟悉?:这里使用的运算符.它看起来像一个三元运算符,但是省略了判断谓词是否为真的表达式.这是什么意思?
我知道include,isset,require,print,echo,和其他一些人都没有的功能,但语言结构.
其中一些语言结构需要括号,而其他语言结构则不需要.
require 'file.php';
isset($x);
Run Code Online (Sandbox Code Playgroud)
有些有返回值,有些则没有.
print 'foo'; //1
echo 'foo'; //no return value
Run Code Online (Sandbox Code Playgroud)
那么语言结构和内置函数之间的内部差异是什么?
<?PHP
require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
throw new Exception('Error');
$c();
?>
Run Code Online (Sandbox Code Playgroud)
Twitto使用从PHP 5.3开始提供的几个新功能:
在PHP 5.3 中,数字2对?:做什么?
另外,匿名函数是什么意思?那不是已经存在了一段时间的东西吗?
php ternary-operator language-construct conditional-operator php-5.3
我发现这会起作用:
echo $value , " continue";
Run Code Online (Sandbox Code Playgroud)
但这不是:
return $value , " continue";
Run Code Online (Sandbox Code Playgroud)
而"." 适用于两者.
句号和逗号之间有什么区别?
我有一段时间一直在困惑这个问题,我看了一下,无法找到关于这个问题的任何讨论.
让我们假设我想实现一个简单的例子,比如一个新的循环结构:do..until
写得非常类似于do..while
do {
//Things happen here
} until (i == 15)
Run Code Online (Sandbox Code Playgroud)
这可以通过这样做转换为有效的csharp:
do {
//Things happen here
} while (!(i == 15))
Run Code Online (Sandbox Code Playgroud)
这显然是一个简单的例子,但有没有办法添加这种性质的东西?理想情况下,作为Visual Studio扩展,以启用语法突出显示等.
在JavaScript ES6中,有一种称为解构的语言功能.它也存在于许多其他语言中.
在JavaScript ES6中,它看起来像这样:
var animal = {
species: 'dog',
weight: 23,
sound: 'woof'
}
//Destructuring
var {species, sound} = animal
//The dog says woof!
console.log('The ' + species + ' says ' + sound + '!')
Run Code Online (Sandbox Code Playgroud)
我可以在C++中做些什么来获得类似的语法并模拟这种功能?
我最近偶然发现了一段像这样的代码:
Object o = .. ;
Foo foo = Foo.class.cast(o);
Run Code Online (Sandbox Code Playgroud)
我实际上甚至不知道java.lang.Class有一个强制转换方法,所以我查看了文档,从我收集的内容中,这只是对类对象所代表的类进行强制转换.所以上面的代码大致相当于
Object o = ..;
Foo foo = (Foo)o;
Run Code Online (Sandbox Code Playgroud)
所以我想知道,为什么我会想要使用强制转换方法而不是简单地进行"旧方法".有没有一个很好的例子,使用cast方法比简单的转换更有益?
在与我的团队中新来的开发人员讨论之后,我意识到在C++中仍然存在使用C构造的习惯,因为它们应该更好(即更快,更精简,更漂亮,选择你的理由).
与类似的C++构造相比,有哪些示例值得共享,显示C构造?
对于每个示例,我需要阅读C++构造与原始C构造一样好或甚至更好的原因.目的是提供一些在C++代码中被认为有些危险/不安全的C构造的替代方案(C++ 0x只有在只有明确标记为C++ 0x的情况下才能接受答案).
我将在答案(结构内联初始化)下面作为示例发布.
注1:请每个案例一个答案.如果您有多个案例,请发布多个答案
注2:这不是C问题.不要在此问题中添加"C"标签. 这不应该成为C++和C之间的斗争.只研究C++的C子集的一些结构,以及它们在其他C++"工具包"中的替代方案.
注3:这不是一个抨击C的问题.我想要理由.吹嘘,抨击和未经证实的比较将被下调.提及没有C等价物的C++特性可以被认为是不可能的主题:我希望并排放置一个针对C++特性的C特征.
我被"拖累"看到这个问题:
当作者最初用许多其他语言标记但后来专注于Haskell问题时,Fibonacci在Haskell中的Closed-form表达式
.不幸的是,我对Haskell没有任何经验,所以我无法真正参与这个问题.然而,其中一个答案引起了我的注意,应答者把它变成了纯整数学问题.这对我来说听起来很棒,所以我必须弄清楚它是如何工作的,并将其与递归的Fibonacci实现进行比较,以了解它的准确性.我有一种感觉,如果我只记得涉及非理性数字的相关数学,我可能能够自己解决所有问题(但我没有).因此,对我而言,第一步是将其移植到我熟悉的语言中.在这种情况下,我正在做C#.
幸运的是,我并没有完全处于黑暗中.我有很多其他功能语言(OCaml)的经验,所以我看起来有点熟悉.从转换开始,一切看起来都很简单,因为它基本上定义了一个新的数字类型来帮助计算.然而,我在翻译中遇到了几个障碍,但我在完成翻译时遇到了麻烦.我的结果完全错了.
这是我正在翻译的代码:
data Ext = Ext !Integer !Integer
deriving (Eq, Show)
instance Num Ext where
fromInteger a = Ext a 0
negate (Ext a b) = Ext (-a) (-b)
(Ext a b) + (Ext c d) = Ext (a+c) (b+d)
(Ext a b) * (Ext c d) = Ext (a*c + 5*b*d) (a*d + b*c) -- easy to work out on paper
-- remaining instance methods are not needed
fib …Run Code Online (Sandbox Code Playgroud) 假设我有这样的代码:
void f(int a = 0, int b = 0, int c = 0)
{
//...Some Code...
}
Run Code Online (Sandbox Code Playgroud)
正如您可以在上面看到我的代码,参数a,b以及c默认参数值为0.现在看看我的主要功能如下:
int main()
{
//Here are 4 ways of calling the above function:
int a = 2;
int b = 3;
int c = -1;
f(a, b, c);
f(a, b);
f(a);
f();
//note the above parameters could be changed for the other variables
//as well.
}
Run Code Online (Sandbox Code Playgroud)
现在我知道我不能只跳过一个参数,并让它具有默认值,因为该值将作为该位置的参数进行评估.我的意思是,我不能,比如说f(a,c),因为,c将被评估为b,这是我不想要的,特别是如果c是错误的类型.有没有一种方法让调用函数在C++中指定,在任何给定的位置使用函数的任何默认参数值,而不限于从最后一个参数向后转到无?是否有任何保留关键字来实现这一目标,或者至少是解决方法?我可以给出一个例子:
f(a, …Run Code Online (Sandbox Code Playgroud)