请参阅 https://issues.scala-lang.org/browse/SI-5205 和 https://github.com/scala/scala-dist/pull/20
从scala中弃用了八进制转义值前导0,我没有看到惯用的替代方法.
你现在如何处理scala 2.10中的octals?
编辑 - unix权限是八进制
各种Clojure风格指南建议避免使用超过80个字符的行.我想知道是否有一种惯用的方法来避免长String文字.
虽然这些日子通常有宽屏幕,但我仍然同意应该避免长线.
以下是一些例子(我很想跟随第一个例子):
;; break the String literal with `str`
(println (str
"The quick brown fox "
"jumps over the lazy dog"))
;; break the String literal with `join`
(println (join " " [
"The quick brown fox"
"jumps over the lazy dog"]))
Run Code Online (Sandbox Code Playgroud)
我知道Clojure支持多行String文字,但使用这种方法会有解释换行符的不良影响,例如使用repl:
user=> (println "The quick brown fox
#_=> jumps over the lazy dog")
The quick brown fox
jumps over the lazy dog
Run Code Online (Sandbox Code Playgroud) 我有一个Scala帮助器方法,当前尝试获取URL并返回带有该网页的HTML的Option [String].
如果有任何异常(格式错误的URL,读取超时等等)或者如果有任何问题,则返回None.问题是,抛出异常以便调用代码可以记录异常或者在这种情况下返回None是否更好?
Ruby的dup和clone方法有什么区别?描述dup和的行为的差异clone.但是什么时候应该使用dup,何时应该使用clone?
实际项目的例子讨论了为什么他们使用dup而不是克隆,反之亦然,这对于这个问题来说是理想的.
或者,解释为什么存在两种不同的方法会有所帮助.这可能是指从红宝石的创造者,或类似的方法检查报表dup,并clone在影响Ruby等语言.
在C++ 11中定义简单常量值的最佳方法是什么,这样就没有运行时惩罚?例如:(不是有效代码)
// Not ideal, no type, easy to put in wrong spot and get weird errors
#define VALUE 123
// Ok, but integers only, and is it int, long, uint64_t or what?
enum {
Value = 123
};
// Could be perfect, but does the variable take up memory at runtime?
constexpr unsigned int Value = 123;
class MyClass {
// What about a constant that is only used within a class, so
// as not to pollute the …Run Code Online (Sandbox Code Playgroud) 许多开发人员和库作者已经在编译时字符串方面苦苦挣扎了好几年了,因为标准(库)字符串std::string需要动态分配内存,而不是constexpr。
因此,关于如何正确获取编译时字符串,我们有很多问题和博客文章:
现在我们已经了解到,不仅代码new可用constexpr,可以在编译时进行动态分配,而且实际上,std::string它将在C ++ 20(Herb Sutter的C ++标准工作组会议报告)中成为constexpr。
这是否意味着对于C ++ 20及以上版本的代码,我们应该放弃所有这些漂亮的编译时字符串实现,并且始终使用std::string?
如果不是,我们什么时候会这样做,什么时候我们会坚持今天的可能(当然不是向后兼容的代码)?
注意:我不是在谈论内容是其类型一部分的字符串,即不是在谈论std::integral_constant; 的等价形式。绝对不会std::string。
我喜欢这样一个事实:Go并没有给我百万种方法来做简单的事情 - 借用Python的Zen,"应该有一个 - 最好只有一个 - 显而易见的方法."
但是,我不清楚实例化类型的首选/惯用方法.基本类型很简单:
n := 0
t := 1.5
str := "Hello"
Run Code Online (Sandbox Code Playgroud)
但是结构呢?以下是等效的,如果是,哪个是首选的,为什么?
var f Foo
f := Foo{}
Run Code Online (Sandbox Code Playgroud)
切片怎么样?我可以做var xs []int,xs := []int{}或者xs := make([]int),但我认为第一种选择(与结构相对)与其他选项不同?我认为这也适用于地图.
有了指针,我听说new应该避免.这是一个很好的建议,如果是的话,什么才算是有效的用法new?
我意识到这可能部分是风格问题,但在任何情况下,选择特定风格的理由都会有所帮助.
我最近强迫自己学习C++,我刚读完了Herbert Schildt的C++:The Complete Reference一书.我喜欢这本书,并认为我或多或少得到了全局.我注意到,当我尝试与其他人一起检查我使用我学到的材料编写的东西时,它们通常被认为是非惯用的,并且被STL方式取代,这样做更安全,更容易(好吧,这本书没有'涵盖STL和Boost库).
所以我想问一下:学习优秀C++程序模式有哪些好的资源?我在哪里可以从"C++方式"学习基本模式来做事,而不仅仅是在C++中重复C模式?
我对包含STL和Boost内容的来源特别感兴趣.
在涉及Clojure时,我完成了一个小例子程序,从一个选择列表中随机选择.
基本思想是迭代选择(分配权重)并将其权重转换为范围,然后在总范围内选择一个随机数来选择一个.它可能不是最优雅的设计,但让我们理所当然.
与下面的例子相比,我会做些什么?
我对整体程序结构建议,名称间距等不感兴趣,主要是在你对每个函数的方法中.
我特别感兴趣的是经验丰富的Clojurer如何处理"增强"功能,我必须使用外部"cur"变量来指代范围的前一端.
(def colors
(hash-map
:white 1,
:red 10,
:blue 20,
:green 1,
:yellow 1
)
)
(def color-list (vec colors))
(def cur 0)
(defn augment [x]
(def name (nth x 0))
(def val (nth x 1))
(def newval (+ cur val))
(def left cur)
(def right newval)
(def cur (+ cur val))
[name left right]
)
(def color-list-augmented (map augment color-list))
(defn within-bounds [bound]
(def min-bound (nth bound 1))
(def max-bound (nth bound 2))
(and (> …Run Code Online (Sandbox Code Playgroud) 考虑C中的以下代码:
for(int i=0; i<10 && some_condition; ++i){
do_something();
}
Run Code Online (Sandbox Code Playgroud)
我想在Python中编写类似的东西.我能想到的最好的版本是:
i = 0
while some_condition and i<10:
do_something()
i+=1
Run Code Online (Sandbox Code Playgroud)
坦率地说,我不喜欢while模仿for循环的循环.这是由于忘记增加计数器变量的风险.另一个选择是增加这种风险:
for i in range(10):
if not some_condition: break
do_something()
Run Code Online (Sandbox Code Playgroud)
重要的澄清
some_condition 并不意味着在循环期间计算,而是指定是否首先启动循环
我指的是Python2.6
哪种款式首选?有没有更好的成语呢?