在 Delphi 中,您显然可以将整个方法调用链分配给单个变量:
program What;
{$APPTYPE CONSOLE}
type
TProc = reference to procedure();
TRecord = record
procedure MethodOfRecord();
end;
procedure TRecord.MethodOfRecord();
begin
WriteLn('MethodOfRecord finished');
end;
function MakeRecord(): TRecord;
begin
WriteLn(' MakeRecord finished');
end;
var
proc: TProc;
begin
proc := MakeRecord().MethodOfRecord;
proc();
proc();
proc();
end.
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我创建了一个 anonymous TRecord,将其方法分配TRecord.MethodOfRecord给 a reference to procedure,然后调用它 3 次。
问题:会MakeRecord被调用多少次?
答案:3次:
MakeRecord finished
MethodOfRecord finished
MakeRecord finished
MethodOfRecord finished
MakeRecord finished
MethodOfRecord finished
Run Code Online (Sandbox Code Playgroud)
每次我打电话时proc,它都会MakeRecord先打电话。这看起来很奇怪。为什么会发生这种情况?我预计它只会被调用一次。是因为匿名吗?当然,如果我给 TRecord …
我正在尝试使用git filter-branch --msg-filterWindows cmd重命名一些提交消息,如下所示:
git filter-branch --msg-filter "python my_editing_script.py" -- --first-parent --no-merges 37827a6c7a65f8e878e..my_branch_name
Run Code Online (Sandbox Code Playgroud)
从my_editing_script.py读取旧消息stdin并将新消息输出到stdout。
但我得到
fatal: options not supported in --stdin mode
Could not get the commits
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我说从本网站系
https://www.emacswiki.org/emacs/IndentationBasics
到我的~/.emacs文件:
(setq-default indent-tabs-mode nil)
(setq tab-width 4)
(defvaralias 'c-basic-offset 'tab-width)
Run Code Online (Sandbox Code Playgroud)
它使我在.h文件和.cpp文件中的选项卡长了8个空格(之前它们是2个空格)。如何使它们长4个空格?
我已经实现了一个类,它可以区分一组固定的实例属性(我们称之为元属性)和一组任意的其他实例属性。
它有自定义__getattr__和__setattr__:
class MyClass(object):
def __init__(self, meta1, meta2, **other_attr):
super(MyClass, self).__setattr__('meta1', meta1)
super(MyClass, self).__setattr__('meta2', meta2)
super(MyClass, self).__setattr__('params', {})
self.params = {key: other_attr[key] for key in other_attr}
# this is called when default lookup finds nothing
def __getattr__(self, key):
print('__getattr__({})'.format(key))
try:
return self.params[key]
except KeyError:
raise AttributeError(key)
# this is called always
def __setattr__(self, key, value):
print('__setattr__({}, {})'.format(key, value))
if key in self.__dict__:
super(MyClass, self).__setattr__(key, value)
else:
self.params[key] = value
Run Code Online (Sandbox Code Playgroud)
这很好用,所有元属性都直接进入__dict__实例的 ,而所有其他属性进入params字典:
obj1 …Run Code Online (Sandbox Code Playgroud) 这是一个Makefile:
.PHONY: all
ifeq ($(OS),Windows_NT)
DETECTED_OS := Windows
else
DETECTED_OS := $(shell uname -s)
endif
$(info DETECTED_OS is set to '$(DETECTED_OS)')
Run Code Online (Sandbox Code Playgroud)
当用制表符缩进时,它会打印
DETECTED_OS is set to ''
但是当缩进 0 个或多个空格时,它会打印
DETECTED_OS is set to 'Linux'
但是如果你删除第一行,.PHONY: all它会打印
DETECTED_OS is set to 'Linux'
无论是制表符还是空格。
所以第一个版本被破坏了,因为它DETECTED_OS没有设置。这是为什么?
我的版本:
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change …Run Code Online (Sandbox Code Playgroud)