有没有办法在 Pharo 的操场内自动缩进代码?

问题描述

我注意到,在使用 Pharo 时,无论我在 Playground 中输入代码的方式如何,如果我尝试运行它,但存在一些问题,当调试器打开时,它会显示您的代码很好地缩进。

例如,如果我在操场上有这个缩进不明显的程序:

| banditA banditB testBandits multiRun results |
banditA := [ 1.0 random <= 0.6 ifTrue: [ 1.0 ] ifFalse: [ 0.0 ] ].
banditB := [ 1.0 random > 0.6 ifTrue: [ 1.0 ] ifFalse: [ 0.0 ] ].

"Tests banditA and banditB n times each,to see which one is better."
testBandits := [ :n |
    | A B |.
    A := 0.0.
    B := 0.0.
    n timesRepeat: [ A := A + banditA value ].
    n timesRepeat: [ B := B + banditB value ].
    A  > B  
        ifTrue: [ { A + B . banditA} ]
        ifFalse: [ A < B 
                        ifTrue: [ { A + B . banditB} ]
                        ifFalse: [ { A + B . { banditA. banditB } atRandom  } ] ] ]. 

"Accumulate the results of size - 2 * nTests number of trials of winning
bandits,each preceded with a explore phase with 2 * nTests (half to each
bandit."
multiRun := [ :nTests :size |
    | testResults sum |
    sum := 0.0.
    testResults := (testBandits value: nTests).
    2 * nTests negated + size timesRepeat: [ sum := sum + (testResults at: 2) value ].
    sum ].

"Average the returns of a thousand runs,to each even number of tests between 1 and
size = 1000."
results := (1 to: 500) collect:
    [ :n | { 2*n. ((1 to: 1000) collect: [ :each | multiRun value: n value: 1000]) average}].

Transcript clear; show: 'Number of tests;Return'; cr.
results do: [ :each | Transcript show: (each at: 1); show: ';'; show: (each at: 2); cr ].

results sorted: [ :first :second | (first at: 2) > (second at: 2) ]

如果我使用 Ctrl+Shift+D 打开此代码示例中的调试器,调试器会显示一个格式良好的 DoIt 对象,减去注释:

DoIt
    | banditA banditB testBandits multiRun results |
    banditA := [ 1.0 random <= 0.6
        ifTrue: [ 1.0 ]
        ifFalse: [ 0.0 ] ].
    banditB := [ 1.0 random > 0.6
        ifTrue: [ 1.0 ]
        ifFalse: [ 0.0 ] ].
    testBandits := [ :n | 
    | A B |
    A := 0.0.
    B := 0.0.
    n timesRepeat: [ A := A + banditA value ].
    n timesRepeat: [ B := B + banditB value ].
    A > B
        ifTrue: [ {(A + B).
            banditA} ]
        ifFalse: [ A < B
                ifTrue: [ {(A + B).
                    banditB} ]
                ifFalse: [ {(A + B).
                    {banditA.
                    banditB} atRandom} ] ] ].
    multiRun := [ :nTests :size | 
    | testResults sum |
    sum := 0.0.
    testResults := testBandits value: nTests.
    2 * nTests negated + size
        timesRepeat: [ sum := sum + (testResults at: 2) value ].
    sum ].
    results := (1 to: 500)
        collect: [ :n | 
            {(2 * n).
            ((1 to: 1000) collect: [ :each | multiRun value: n value: 1000 ])
                average} ].
    Transcript
        clear;
        show: 'Number of tests;Return';
        cr.
    results
        do: [ :each | 
            Transcript
                show: (each at: 1);
                show: ';';
                show: (each at: 2);
                cr ].
    ^ results sorted: [ :first :second | (first at: 2) > (second at: 2) ]

经过一番挖掘,我发现类浏览器中有一个格式化源代码的选项,只需右键单击源代码,然后选择源代码> 格式化代码:

enter image description here

但我找不到对操场内的源代码执行相同操作的方法,因为右键单击时未显示源代码 > 格式代码选项。如果我在操场内尝试键盘快捷键 Ctrl-T,它只会擦除所选的任何内容。我可以将代码从 Playground 复制到浏览器中,在那里格式化,然后将其复制回 Playground,或者可以打开示例上的调试器,然后将格式良好的代码复制到 Playground 中,擦除 DoIt 顶行和从最后一行的表达式中返回符号 ^,但这并不方便。所以我想知道是否有适当的方法。

顺便说一下,我用作示例的代码示例是我尝试模拟 Multi-armed bandit problem 一书中描述的心理实验中使用的 Algorithms to Live By: The Computer Science of Human Decisions 实例:

“一旦你熟悉它们,就很容易看到多臂 我们到处都是强盗。我们很少制作 孤立的决定,结果不会为我们提供任何 我们将来会用来做出其他决定的信息。所以 很自然地会问,就像我们在优化停止时所做的那样,人们有多好 通常倾向于解决这些问题——这个问题一直存在 心理学家和行为学家在实验室中进行了广泛的探索 经济学家。总的来说,人们似乎倾向于过度探索—— 不成比例地偏爱新的而不是最好的。在一个简单的 这种现象的证明,发表于 1966 年,Amos Tversky 和 Ward Edwards 进行了实验,向人们展示了一个盒子 上面有两盏灯,并告诉每盏灯会打开一个固定的(但 未知)时间的百分比。然后给了他们 1,000 有机会观察哪个灯亮了,或者下注 在没有得到观察它的结果。 (不像更多 传统的老虎机问题设置,在这里无法“拉” 这既是赌注又是观察;参与者不会 了解他们的赌注是否在最后得到了回报。)这是纯粹的 探索 vs. 开发,在获取信息上进取 坚决反对使用它。在大多数情况下,人们采用了 观察一段时间,然后押注什么的明智策略 似乎是最好的结果——但他们总是花更多的钱 观察时间比他们应该有。还有多少时间?在一 实验中,一盏灯有 60% 的时间亮,另外 40% 的时间亮 时间,差异既不特别明显也不特别 微妙的。在那种情况下,人们平均选择观察 505 次, 下注其他 495 次。但数学说他们应该有 仅在 38 次观察后开始下注 - 留下 962 次兑现机会 在。”

我想看看我是否可以得出 38 这个数字作为最佳数字,所以我写了这个模拟。非常接近,此图显示了一次运行的结果:

enter image description here

此特定运行的最大值为 34,非常接近 38。运行之间存在一些差异,因为曲线在顶部有点嘈杂,但最大值始终与 38 相差不到 10 个位置。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...