假设我有一个someObj不确定类型的对象,我想做类似的事情:
def value = someObj.someMethod()
Run Code Online (Sandbox Code Playgroud)
如果不能保证'someObj'实现该someMethod()方法,如果没有,则返回null.
在Groovy中是否有类似的东西,或者我需要将其包含在带有instanceof支票的if语句中?
我为一些任务写了一个简单的地图实现.然后,出于好奇,我又写了两篇.我喜欢map1,但代码有点难以阅读.如果有人感兴趣,我会很感激简单的代码审查.
哪一个更好?你知道在javascript中实现这个的其他方法吗?
var map = function(arr, func) {
var newarr = [];
for (var i = 0; i < arr.length; i++) {
newarr[i] = func(arr[i]);
}
return newarr;
};
var map1 = function(arr, func) {
if (arr.length === 0) return [];
return [func(arr[0])].concat(funcmap(arr.slice(1), func));
};
var map2 = function(arr, func) {
var iter = function(result, i) {
if (i === arr.length) return result;
result.push(func(arr[i]));
return iter(result, i+1);
};
return iter([], 0);
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑
我一般都在考虑这种功能.
例如,现在我将使用它来迭代这样:
map(['class1', 'class2', 'class3'], function(cls) …Run Code Online (Sandbox Code Playgroud) 它几乎已经达到了你不能再购买传统(4:3)显示器的程度了.几乎所有东西都是宽屏.这对于观看电影或电视很好,但它对编程有好处还是坏处?
我对这个问题的初步想法是,宽屏对程序员来说是一个净负面因素.以下是我看到的一些缺点:
空间利用率差
您无法争辩的宽屏幕的一个缺点是,它们为您获得的总像素数提供了较差的空间利用率.例如,我的ThinkPad,我只是宽屏热潮之前买的,有一个15" 运行的ThinkPad与1600×1200的15.4" 更新的原始分辨率显示器至多1680 X 1050.所以,(如果你计算一下)你在更宽(但不短)的包中获得更少的像素.使用桌面显示器,您可以根据使用的桌面空间付出代价.两个1680 x 1050显示器将占用更多的桌面而不是两个1600 x 1200显示器(假设点距相等).
更多滚动
如果将1680 x 1050显示器与1600 x 1200显示器进行比较,则会获得80个额外像素的宽度,但会减少150个像素的高度.高度降低意味着您丢失大约11行代码.你可以一次在屏幕上看到的更少,你需要做更多的滚动.这会损害生产力,可能不是很大,但却是阴险的.
宽面板的空间较小
宽屏也意味着您在编程环境中常见的宽屏幕和短屏幕空间.例如,如果使用Visual Studio,则在查看"查找结果","任务列表"或"错误列表"(我经常使用的所有内容)时,您的代码窗口将会短得多.这并不是说用宽屏获得的额外宽度的80像素永远不会有用,但我倾向于保持我的代码行短,所以看到更多的线对我来说比看到更少,更长的线更有价值.
你怎么看?
你同意/不同意吗?您现在使用一个或多个宽屏显示器进行开发吗?你在每个上运行什么分辨率?你有没有想过传统4:3显示器的高度?如果您的显示器窄一英寸但高两英寸,您会抱怨吗?
我想使用WPF ToggleButton来扩展和折叠我的应用程序中的一些控件.我如何使用XAML来实现这一目标?
我想,我可以在某种程度上绑定Visibility一些控件的属性到ToggleButton的IsChecked状态,但我不知道如何做到这一点.
也许我需要给我ToggleButton一个Name,然后使用绑定ElementName?然后我需要一个ValueConverter布尔值和可见性之间的转换,对吗?我怎么能ValueConverter为此目的制作通用的?
我有一个当前使用python 2.5.4运行的Debian系统.我得到了virtualenv正确安装,一切正常.我是否有可能使用不同版本的Python的virtualenv?
我编译了Python 2.6.2,并希望将它与一些virtualenv一起使用.是否足以覆盖二进制文件?或者我是否必须更改库中的某些内容?
(这是一个类似C的环境)假设我有两个实例对象,一个汽车和一个bodyShop.该车有一个颜色iVar和相应的加速器.bodyShop有一个名为"paintCar"的方法,它将接收一个汽车对象并改变其颜色.
至于实现,为了让bodyShop实际上能够改变汽车对象的颜色,我看到了两种方法.
使用"&"运算符传入指向汽车的指针.然后bodyShop可以告诉汽车执行一些必须改变颜色的方法,或者它可以直接使用汽车的存取器.
按值传递汽车对象,执行相同类型的操作以更改颜色,然后让方法返回具有新颜色的汽车对象.然后将原始汽车对象分配给新汽车对象.
选项1对我来说似乎更直接,但我想知道它是否符合OOP最佳实践.一般来说,对于"最大OOP","&"运算符是好还是坏?或者,也许我完全错过了一个更好的选择,可以使这个超级OOPer.请指教 :)
关于Haskell的类型系统,我有一个相当普遍的问题.我正在努力熟悉它,我有以下功能:
getN :: Num a => a
getN = 5.0 :: Double
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我收到以下错误:
Couldn't match expected type `a' against inferred type `Double'
`a' is a rigid type variable bound by
the type signature for `getN' at Perlin.hs:15:12
In the expression: 5.0 :: Double
In the definition of `getN': getN = 5.0 :: Double
Run Code Online (Sandbox Code Playgroud)
据我了解,该函数设置为"返回"类Num中的类型.Double是在这个类中(http://www.zvon.org/other/haskell/Outputprelude/Num_c.html),所以我原本预计在这种情况下"返回"Double是可以的.
有人可以解释一下吗?
好像我可能在语法中遗漏了一些简单的东西,但是我想直接从linq语句中获取FirstOrDefault的结果,而不必先将IEnumerable存储在临时变量中.像这样的东西:
var bestCar = from c in cars
orderby c.Price
select first c
Run Code Online (Sandbox Code Playgroud)
我知道第一个关键字实际上并不存在,但说明了我想要做的事情.我也知道我可以在括号中包含from ... select语句并直接调用FirstOrDefault,但我认为上面的语法更清晰,更易于阅读.
如何使用Perl打印到变量?
我一直在研究一个程序,它以高度冗长的方式记录它的迭代进度......
print $loghandle $some_message;
Run Code Online (Sandbox Code Playgroud)
但是,我还想有选择地将一些消息打印到不同的文件中.当然,我可以将代码撒上......
print $loghandle $some_message
print $otherloghandle $some_message
Run Code Online (Sandbox Code Playgroud)
或者将整个业务重写为一个功能.等等.
我想要做的是在打开$ loghandle时做一些魔术,这样当我print正在进行时,我实际上只是sprintf对一个变量进行ish操作(调用它$current_iteration),这样当我做出决定时我能做点什么......
print $real_log_file $current_iteration;
print $other_real_log_file $current_iteration if($condition);
Run Code Online (Sandbox Code Playgroud)
我很确定我在某个地方见过这样的东西,但我不知道它在哪里或在哪里看.
编辑:File :: Tee在某种程度上在*nix上解决了这个问题,但我在Windows上运行.
我在以下代码中的注释标记位置出现"非法表达式启动"错误.我该如何更正此错误?
class planetUfo {
public static void main (String[] args) {
// having data for counting the index
char letters[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
// initial data
String[] groups = {"COMETQ", "ABSTAR"};
String[] comets = {"HVNGAT", "USACO"};
// Problem here!
// to count the index
private void countIndex ( String group, String comet ) {
// I get here "illegal start of an expression"
// to have two words in the array
char[] name = { group, comet };
// to go …Run Code Online (Sandbox Code Playgroud) binding ×1
c ×1
car-analogy ×1
groovy ×1
hardware ×1
haskell ×1
java ×1
javascript ×1
linq ×1
map ×1
monitor ×1
oop ×1
perl ×1
printing ×1
python ×1
togglebutton ×1
type-systems ×1
typeclass ×1
types ×1
virtualenv ×1
wpf ×1
xaml ×1