在讨论编程时,有几次我对由于使用序数数字如何引用连续的基于零的数组元素的不同观点引起了误解.似乎有两种观点:
a[0] = "first";
a[1] = "second";
a[2] = "third;
Run Code Online (Sandbox Code Playgroud)
VS:
a[0] = "zeroth";
a[1] = "first";
a[2] = "second";
Run Code Online (Sandbox Code Playgroud)
我总是喜欢第一个,知道"第n个"元素是"索引n-1的元素".但我很惊讶有多少人发现反直觉并使用了后一版本.
这些惯例之一是否比另一个更正确?我应该在讨论或文档中使用哪些来避免误解?
language-agnostic arrays documentation terminology conventions
受到另一个问题的启发,我试图将我的思想包含在NumPy中的高级索引中,并建立更直观的理解它的工作原理.
我发现了一个有趣的案例.这是一个数组:
>>> y = np.arange(10)
>>> y
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
如果我将它标记为标量,我当然会得到一个标量:
>>> y[4]
4
Run Code Online (Sandbox Code Playgroud)
使用1D整数数组,我得到另一个1D数组:
>>> idx = [4, 3, 2, 1]
>>> y[idx]
array([4, 3, 2, 1])
Run Code Online (Sandbox Code Playgroud)
所以,如果我用2D整数数组对它进行索引,我得到......我得到了什么?
>>> idx = [[4, 3], [2, 1]]
>>> y[idx]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
Run Code Online (Sandbox Code Playgroud)
不好了!对称性被打破了.我必须用3D数组索引才能获得2D数组!
>>> idx = [[[4, 3], [2, 1]]]
>>> y[idx]
array([[4, 3],
[2, …Run Code Online (Sandbox Code Playgroud) 我有水平ListBox.这是代码(删除一些不相关的):
<ListBox Grid.Row="1"
ItemContainerStyle="{StaticResource ListBoxUnselectableItemStyle}"
ItemsSource="{Binding ...}"
BorderThickness="0"
Background="{x:Null}"
ScrollViewer.CanContentScroll="False">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Background="Red"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
我得到像这样的项目布局行为:
]
如您所见,第二项较小,VerticalLayout不是我想要的Top.
有谁能够帮我?
怎么用smarty包含文件?我使用这个函数:{include file ="modules/news.tpl"}
但显示错误:
警告:Smarty错误:无法读取资源:"modules/news.tpl"
文件存在并位于modules/news.tpl目录中.
谢谢
我注意到当我在REPL中键入一个运算符时,它经常被扩展为一个与输入/输出历史有关的值.
具体来说,我注意到:
+,++...扩展到以前的输入,*,**...扩展到以前的输出,- 扩展到当前输入显然有更多(/扩展到某些东西,但我还没有完全弄明白).
我试过浏览clisp文档,但没有成功.
我的问题:
In和Out数组)?lisp clisp common-lisp interactive-mode read-eval-print-loop
我正在尝试估算在应用程序商店中使用 GAE 的每月成本,但我并不真正了解什么是实例以及我可以在一个实例中做什么。
我可以只有一个具有多个线程的实例来处理多个客户端吗?由于我每天为每个应用程序提供 28 小时的免费实例 ( http://cloud.google.com/pricing/ ),这是否意味着我不会为一直运行的服务器应用程序付费?
考虑这个简单的代码:
type Message struct { /* ... */ }
type MyProcess struct {
in chan Message
}
func (foo *MyProcess) Start() {
for msg := range foo.in {
// handle `msg`
}
// someone closed `in` - bye
}
Run Code Online (Sandbox Code Playgroud)
我想更改 MyProcess 以支持 2 种不同类型的消息。我有两个想法:
a) 类型开关
type Message struct { /* ... */ }
type OtherMessage struct { /* ... */ }
type MyProcess struct {
in chan interface{} // Changed signature to something more generic
}
func (foo *MyProcess) …Run Code Online (Sandbox Code Playgroud) 在他的谈话- https://blog.golang.org/concurrency-is-not-parallelism,罗勃·派克说,去例程类似于线程,但很多便宜得多.有人可以解释原因吗?
假设我想表达" 一种期望实现IFoo和IBar接口的对象的方法 ".就像是:
void Method(IFoo+IBar param);
Run Code Online (Sandbox Code Playgroud)
我怎么能用C#说这个?
(是否存在语法结构?或者是一个好习惯?)
介绍一个界面:
interface IFooBar : IFoo, IBar {}
void Method(IFooBar param);
Run Code Online (Sandbox Code Playgroud)
这很糟糕,我后悔甚至想到它:-)乍一看看起来很好,但可悲的部分是默默地引入了一个不应该在这里的依赖.
IFooBar存在的唯一原因是成为Method界面的一部分.因此,要用作Method参数的任何类对象必须知道此方法(和该接口)存在 - 否则不会出现这种情况.实现IFoo和IBar的所有类都需要修改以实现IFooBar(可能了解新的程序集) - 这是非常不切实际的,如果我们无法修改它们甚至是不可能的.
不必要的依赖=不禁.
放弃静态输入:
void Method(object param)
{
if (!param is IFoo)
throw new ArgumentException("IFoo not supported", "param");
if (!param is IBar)
throw new ArgumentException("IBar not supported", "param");
// ...
}
Run Code Online (Sandbox Code Playgroud)
(或:在签名中定义一种类型并动态检查其他类型 - 如果一个是最重要的,则更可取,但更令人困惑)
工作正确,但在运行时(没有编译时检查).迫切需要一个doc(每个人都要阅读它).
也仅适用于功能参数.如果我试图在一个字段上使用它,那么代码会因为强制转换而大量膨胀.
这种情况的真实案例?例如IList<Foo>+ INotifyCollectionChanged.
我编写了以下块来从外部数据文件中读取:
open(unit=338,file='bounnodes.dat',form='formatted')
DO I=1,NQBOUN
DO J=1,NUMBOUNNODES(I)
read(338,2001) NODEBOUN(i,j)
write(6,*) 'BOUNDARY NODES', NODEBOUN(i,j)
ENDDO
ENDDO
2001
FORMAT(32I5)
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该读取一个2 x 32阵列bounnodes.dat.但是,我end-of-file在读取过程中遇到错误并打印出第一列.
我尝试使用相同的代码读取32 x 2数组,它读取第一列的32个元素,但输出0s下一列.
你能解释一下发生了什么吗?我的格式错了吗?