我正在阅读Hadley Wickham 的Advanced R,试图解决第 2.3.6 节中关于修改时复制的练习 2:
解释为什么
tracemem()在运行此代码时会显示两个副本。提示:仔细查看此代码与本节前面显示的代码之间的区别。Run Code Online (Sandbox Code Playgroud)x <- c(1L, 2L, 3L) tracemem(x) x[[3]] <- 4
(前面的代码将双精度列表中的一个元素更改为另一个双精度,仅产生一个副本。)
在Grosser 和 Bumann的Advanced R Solutions 中,他们解释说第二个副本是由于类型强制,从整数到双精度。它们没有定义x为c(1L, 2L, 3L),而是使用x <- 1:3,我认为这是等效的(使用identical也返回比较它们TRUE)。但是,运行上面的代码(在我这边)只会产生一个副本,但是运行以下代码会产生两个副本:
x <- 1:3
tracemem(x)
x[[3]] <- 4
Run Code Online (Sandbox Code Playgroud)
运行此代码还会产生两个副本:
x <- c(1L, 2L, 3L)
typeof(x)
tracemem(x)
x[[3]] <- 4
Run Code Online (Sandbox Code Playgroud)
例如,替换typeofwithclass只会产生一个副本,但替换为modeor 会pryr::otype产生两个副本。但简单地打印x出来反而会产生一份副本。
那么c(1L, …
在Windows 10(丹麦语)的Codeblocks中使用K&R中的代码示例.以下示例按预期工作:
#include <stdio.h>
int main() {
char c = 'a';
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
但是,下面打印一系列带有问号的方框,与我输入的字符数相同:
#include <stdio.h>
int main() {
char c;
while (c = getchar() != '\n') {
putchar(c);
}
}
Run Code Online (Sandbox Code Playgroud)
所以它看起来像编码问题.运行时,会在标题中打开一个命令提示符,其中包含"C:\ Users\username\Desktop\filename.exe",我的用户名包含丹麦字符"å",后面用"Õ"替换.命令提示符使用CP 850字符集.
(顺便说一句,我没有检查字符是否等于EOF,因为这会产生奇怪的结果.按Enter键打印预期的盒子数,再加上一个\n,但它不会结束程序.)