我正在使用新的Scala IDE(Eclipse 3.6.2 + Scala IDE 2.0.0 [Scala 2.9.0]),我尝试做一些像这样简单的事情:
(1 to 10).sum
Run Code Online (Sandbox Code Playgroud)
这很好,但我最近也做了很多Groovy,我自动写道:
(1 to 10).sum()
Run Code Online (Sandbox Code Playgroud)
第二个版本在IDE中给出了编译器错误,并显示以下消息:
方法总和的参数不够:(隐式数:数字[B])B.未指定的值参数num.
我在Scala API上看到有两个版本的sum,一个不带参数,另一个带上面隐含的.我是否必须在没有括号的情况下调用零参数方法?
当我执行以下查询时,即使有11条匹配的记录,也没有按照写入的方式返回.但是,如果我删除第6行和第9行的括号,则按预期返回所有11条记录.
1 select obj_id, obj_title, UI_DISPLAYNAME
2 from PITS_OBJECT
3 LEFT OUTER JOIN ui_displayname_view ON obj_create_ui_id = UI_ID
4 where
5 /* w/ parens, no results, w/o parens, expected results */
6 (
7 Upper( UI_DISPLAYNAME ) LIKE Upper( '%smith%' )
8 OR Upper( OBJ_TITLE ) LIKE Upper( '%smith%' )
9 )
10 /* end w/ parents, no results.... */
11 AND OBJ_ID IN (select obj_id from PITS_OBJECT where
12 (UPPER( OBJ_TITLE ) LIKE UPPER( '%smith%' ))
13 AND obj_id …
Run Code Online (Sandbox Code Playgroud) 在现代Perl中,&是可选的,如果子例程已经预先声明,则是括号.
我注意到很多时候,人们使用的事实是,在调用Perl子例程时可以省略括号(例如,从最近的SO答案中随机引用):
open my $fin, '<', $file;
Run Code Online (Sandbox Code Playgroud)
同样有效
open(my $fin, '<', $file);
Run Code Online (Sandbox Code Playgroud)
使用第二个(无括号)版本的主要(理想情况下,技术上)原因是什么?
除了再次提及选择性之外,perldoc perlsyn没有就该主题发表任何言论.
对我来说,由于我作为C开发人员的起源,总是使用括号主要是一种风格选择; 但我想知道我是否遗漏了不使用可选的无括号语法作为Perl开发人员的问题.
PS我完全清楚偏好带括号的版本的原因 - 例如间接对象表示法的问题,或者在没有括号的情况下使用非内置函数的要求,或者优先使用visavi or
vs的问题||
.我对相反的兴趣.
PPS我对答案并不是很感兴趣,只是在没有任何研究支持意见的情况下说明"它的风格更好"/"更具可读性".我对技术原因感兴趣,不喜欢括号遗漏,或支持风格差异偏好(请不要混淆"备份"与"诉诸权威"或"论证广告"谬误.研究显示速度提高或对代码的理解就是证据."Perl社区中的每个人都同意"或"Damien Conway建议这一点"而不解释Damien如何支持这一点并不是这样.
显然,这个问题在阅读之后会经常出现
并且思考了一会儿的问题,我写了一个函数来返回包含在任意数量的嵌套()内的内容
该函数可以很容易地扩展到任何正则表达式对象,在此发布您的想法和注意事项.
任何重构建议将不胜感激
(注意,我仍然是python的新手,并且不想弄清楚如何引发异常或其他什么,所以我只是让函数返回'失败',如果它不能弄清楚发生了什么)
编辑功能以考虑评论:
def ParseNestedParen(string, level):
"""
Return string contained in nested (), indexing i = level
"""
CountLeft = len(re.findall("\(", string))
CountRight = len(re.findall("\)", string))
if CountLeft == CountRight:
LeftRightIndex = [x for x in zip(
[Left.start()+1 for Left in re.finditer('\(', string)],
reversed([Right.start() for Right in re.finditer('\)', string)]))]
elif CountLeft > CountRight:
return ParseNestedParen(string + ')', level)
elif CountLeft < CountRight:
return ParseNestedParen('(' + string, level)
return string[LeftRightIndex[level][0]:LeftRightIndex[level][1]]
Run Code Online (Sandbox Code Playgroud) 我有这个小类来对字符串进行多次替换:
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
public class MultipleReplace {
public static void main(String[] args) {
Map<String,String> tokens = new HashMap<String,String>();
tokens.put(":asd:", "<img src=asd.gif>");
tokens.put(":)", "<img src=sorriso.gif>");
String template = ":asd: bravo! :)";
String patternString = "(" + StringUtils.join(tokens.keySet(), "|") + ")";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(template);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
}
matcher.appendTail(sb);
System.out.println(sb.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
问题是在第二次替换,我有一个括号导致:
线程"main"中的异常java.util.regex.PatternSyntaxException:索引8(:)|:asd :)附近的不匹配的结束')'
我怎么能逃脱括号?或者,你能建议一个替代方案来做多次替换吗?
非常感谢,对不起我的英语:)
编辑:
使用反斜杠转义')'也不起作用,它不会编译:
"无效的转义序列(有效转义序列为\ b\t \n\f\r \"\'\)" …
我想确定列表是否包含某个字符串,所以我使用生成器表达式,如下所示:
g = (s for s in myList if s == myString)
any(g)
Run Code Online (Sandbox Code Playgroud)
当然我想内联这个,所以我这样做:
any((s for s in myList if s == myString))
Run Code Online (Sandbox Code Playgroud)
然后我认为单个parens会更好看,所以我尝试:
any(s for s in myList if s == myString)
Run Code Online (Sandbox Code Playgroud)
并不是真的期待它的运作.惊喜!它呢!
那么这个合法的Python还是我的实现允许的东西?如果它是合法的,这里的一般规则是什么?
请考虑以下示例
\begin{equation}
\begin{split}
f = & \left( \frac{a}{b} + \right. \\
& \left. c \right) + d
\end{split}
\end{equation}
Run Code Online (Sandbox Code Playgroud)
在结果中,第一行的左括号非常大,因为里面的分数.在第二行中,由于没有分数,因此括号很小.
如何使第二行的那个匹配第一行的高度?
例
#define Echo(a) a
#define Echo(a) (a)
Run Code Online (Sandbox Code Playgroud)
我意识到这里可能没有显着差异,但为什么你想要a
在宏体内包括括号内?它是如何改变它的?
我有以下代码:
<?php
$a = 1;
$b = 2;
echo "sum: " . $a + $b;
echo "sum: " . ($a + $b);
?>
Run Code Online (Sandbox Code Playgroud)
当我执行我的代码时,我得到:
2
sum: 3
Run Code Online (Sandbox Code Playgroud)
为什么它无法"sum:"
在第一个回声中打印字符串?将附加括在括号中似乎没问题.
这种奇怪的行为是否记录在案?
我已经搜索了近,远没有找到一个可以简单地自动关闭像Textmate这样的一组括号的插件.例如:
Vim : (*manually close parens* ? )
Textmate: (*Auto closes parens*)
Run Code Online (Sandbox Code Playgroud)
如果你能为此描述一个插件,我会非常乐于助人.谢谢!