我知道我可以没有它,但这个问题一直困扰着我.
是否有一个Ruby语言相当于Groovy的Elvis运算符(?:)?
从本质上讲,我希望能够缩短这一点
PARAM = ARGV[0] ? ARGV[0] : 'default'
Run Code Online (Sandbox Code Playgroud)
或者等价
PARAM = 'default' unless PARAM = ARGV[0]
Run Code Online (Sandbox Code Playgroud)
变成这样的事情
PARAM = ARGV[0] ?: 'default'
Run Code Online (Sandbox Code Playgroud) 假设我使用sigil_S以下方法构造一个字符串
iex> s = ~S(#{1 + 1})
"\#{1 + 1}"
Run Code Online (Sandbox Code Playgroud)
然后我如何让Elixir评估该字符串或执行插值,就像我输入了字面值一样"#{1 + 1}"?
换句话说,我该如何评价"2"呢?
我知道我可以使用EEx(例如EEx.eval_string "<%=1 + 1%>"),但我很好奇是否有办法只使用'普通'字符串插值.
我怎么能从字符串中读取数字,直到找到一个特定的字符,在我的例子中 - 一个点.
比如我有一个
String date = "18.8.2011"
int mDay = 0;
int mMonth = 0;
int mYear = 0;
Run Code Online (Sandbox Code Playgroud)
我想制作mDay = 18,mMonth = 8并且mYear = 2011- 我希望能够复制数字,直到我找到一个点.
以下要点中的代码几乎逐字逐句地从Martin Odersky的Scala课程中的功能编程原则的课程中逐字逐句解读:
https://gist.github.com/aisrael/7019350
问题发生在第38行,union在类的定义中NonEmpty:
def union(other: IntSet): IntSet =
// The following expression doesn't behave associatively
((left union right) union other) incl elem
Run Code Online (Sandbox Code Playgroud)
使用给定表达式,((left union right) union other),largeSet.union(Empty)花费过多的时间量与套100层的元件或多个来完成.
当该表达式更改为时(left union (right union other)),联合操作将相对立即完成.
增加:这是一个更新的工作表,显示即使对于具有随机元素的较大集合/树,表达式((左∪右)∪其他)可以永远占用但(左∪(右∪其他))将立即完成.