小编Ale*_*x D的帖子

编写Clojure代码以便从控制台重复读取行的惯用方法?

最近我写了一个小的CLI脚本,需要重复从控制台读取日期(计算的日期数量计算,每次都可能不同).示例Ruby代码为您提供了以下想法:

dates = x.times.collect { print "Enter date: "; Date.parse(gets.chomp) }
Run Code Online (Sandbox Code Playgroud)

只是它的心里很不舒服,我用Clojure写的剧本,彼时使用一些相当丑陋的代码swap!loop...recur.我想知道在Clojure中达到预期效果最干净的方法是什么.(Clojure确实有dotimes,但它不会保留评估正文所返回的值......正如强调纯函数式编程的语言所预期的那样.)

command-line functional-programming clojure console-input

10
推荐指数
2
解决办法
990
查看次数

如何为使用class_eval定义的方法添加RDoc文档?

class_eval用来更简洁地定义一堆重复的方法,如下所示:

%w{greasy chunky bacon}.product(%w{flying sky poodle}).each do |a,b|
  class_eval "def #{a}_#{b}; do_something; end"
end
Run Code Online (Sandbox Code Playgroud)

我希望所有生成的方法都包含在RDoc文档中.是否有RDoc指令"手动"将方法添加到类的方法列表中?我找不到一个.

ruby metaprogramming rdoc

9
推荐指数
1
解决办法
892
查看次数

在Linux上,是由内核还是由libc(或其他语言运行库)设置的TLS?

我正在研究如何在Linux系统上实现TLS(线程本地存储).文档ELF处理线程局部存储解释了程序对线程局部变量的要求如何在ELF二进制文件中编码,以及"运行时"如何处理这些二进制文件.

但是,我不清楚在实践中,设置TLS区域的"运行时"是Linux内核(及其加载ELF二进制文件的代码)还是libc中的一些初始化代码.有人能简单解释一下吗

(背景:我正在尝试静态链接并运行一个应用程序,但它在启动时会出现段错误.在gdb中,我可以看到segfaulting代码是来自libc的一些初始化代码.它试图使用相对于的地址读取静态变量GS,但GS为零.)

c linux libc thread-local-storage

8
推荐指数
1
解决办法
1452
查看次数

这个C语法是什么(在Linux drivers/net/bonding/bond_main.c中使用)?

我以前写了很多C,但是我不认识这个语法:

static const char *names[] = {
    [BOND_MODE_ROUNDROBIN] = "load balancing (round-robin)",
    [BOND_MODE_ACTIVEBACKUP] = "fault-tolerance (active-backup)",
    [BOND_MODE_XOR] = "load balancing (xor)",
    [BOND_MODE_BROADCAST] = "fault-tolerance (broadcast)",
    [BOND_MODE_8023AD] = "IEEE 802.3ad Dynamic link aggregation",
    [BOND_MODE_TLB] = "transmit load balancing",
    [BOND_MODE_ALB] = "adaptive load balancing",
};
Run Code Online (Sandbox Code Playgroud)

[...] =部分对我来说很奇怪.(顺便说一句,BOND_MODE_ROUNDROBIN其他的是宏,它们只是扩展为整数.)

c linux syntax

7
推荐指数
1
解决办法
105
查看次数

UEFI"应用程序"实际上用于什么类型的东西?

我对PC固件编程很感兴趣,我只是在研究UEFI规范.令我惊讶的是,它似乎是嵌入固件的整个操作系统的规范.您甚至可以编写UEFI"应用程序",它们直接使用UEFI引导服务运行,而不存在任何其他操作系统.

我找到了博客文章,展示了如何创建"Hello,world!" 可以在UEFI预引导环境中运行的应用程序.这很有趣,同时也很奇怪.我将在常规操作系统上运行我的"Hello,world"程序,谢谢.

UEFI应用程序实际上有哪些用例?花哨的启动配置屏幕?任何"真正的"商用PC固件是否使用UEFI应用程序来实现除引导加载程序和引导配置实用程序之外的任何其他功能?

firmware efi uefi

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

为什么可以使用 typedef 的名称作为结构成员的名称?

我刚刚发现gccclang接受以下代码:

typedef int blah;
struct s { char blah; };
Run Code Online (Sandbox Code Playgroud)

但是,他们拒绝这样做,因为类型名称被用作标识符:

typedef int blah;
char blah;
Run Code Online (Sandbox Code Playgroud)

这是否意味着 typedef 的名称在结构定义中不可见?不,因为这在 gcc 和 clang 中都有效:

typedef int blah;
struct s { blah blah; }
Run Code Online (Sandbox Code Playgroud)

我正在查看 C99 标准,但找不到任何说明为什么 typedef 名称可以用作结构成员的名称,但不能用作同一范围内变量的名称的任何内容。

有人可以解释为什么会这样吗?参考任何适用的标准将不胜感激。

c struct scope typedef

7
推荐指数
1
解决办法
109
查看次数

ruby数组,从第二个到最后一个获取所有元素

我的方法:

 def scroll_images
   images_all[1..images_all.length]
 end
Run Code Online (Sandbox Code Playgroud)

我不喜欢我打电话images_all两次,只是想知道是否有一个好的技巧可以打电话self或类似的东西,使这个更清洁一点.

ruby arrays

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

开始研究Clojure源代码的好地方?

我想学习Clojure官方实施.任何熟悉代码的人都可以建议从哪里开始阅读它?是否有某些部分可以更容易地理解其余部分,或者哪些部分是理解Clojure如何工作的关键?

clojure

5
推荐指数
1
解决办法
379
查看次数

Postgres中真实的,数学上的"模数"运算?

在Ruby中:

-2 % 24
=> 22
Run Code Online (Sandbox Code Playgroud)

在Postgres:

SELECT -2 % 24;
 ?column?
----------
      -2

SELECT mod(-2,24);
 mod
-----
  -2
Run Code Online (Sandbox Code Playgroud)

我自己可以很容易地写一个,但我很好奇Postgres是否有一个真正的模数运算,而不是除法后的余数.

sql postgresql

5
推荐指数
1
解决办法
4270
查看次数

在x86上,启用分页是否会导致"无条件跳转"(因为EIP现在是虚拟地址)?

通过将CR0中的分页位设置为1来启用分页时,所有指针(包括EIP)现在都被解释为虚拟地址而不是物理地址.除非CPU当前正在执行的内存区域是"身份映射"(虚拟地址映射到相同的物理地址),否则这似乎会导致CPU执行相当于"无条件跳转"的操作 - 它应该开始从不同的(物理)地址执行代码.

这实际发生了吗?看起来让操作系统启动代码可靠地运行这种行为是非常棘手的.或者所有保护模式操作系统身份映射他们自己的内核代码?

cpu paging x86

5
推荐指数
1
解决办法
311
查看次数