簡體   English   中英

可以創建一個獨立的方法/函數(沒有任何類)

[英]Can one create a standalone method/function (without any class)

我正在嘗試了解閑聊。 是否可以有一個獨立的方法/函數,它不屬於任何特定類,以后可以調用:

amethod ['amethod called' printNl]. 
amethod.

上面的代碼給出以下錯誤:

simpleclass.st:1: expected Eval, Namespace or class definition

如何按照錯誤消息的建議使用EvalNamespace

我嘗試了以下操作,但沒有任何效果:

Eval amethod [...
amethod Eval [...
Eval amethod Eval[...        "!"

Eval [...有效,但我想給該塊起個名字,以便以后使用。

Follow也可以工作,但立即執行,以后再調用時不執行。

Namespace current: amethod ['amethod called' printNl]. 

感謝您的見解。

在Smalltalk中,等效於獨立方法的是Block (又名BlockClosure )。 您可以通過將Smalltalk表達式放在方括號之間來創建它們。 例如

[3 + 4]

要評估一個塊,請向其發送消息value

[3 + 4] value

這將回答7

塊也可能有參數:

[:s | 3 + s]

您用value:評估它們value:

[:s | 3 + s] value: 4  "answers with 7"

如果該塊包含多個句子,則可以用點將它們分開,就像在方法主體中所做的那樣。


附錄

Smalltalk中的塊是一流的對象。 特別是,可以用變量引用它們,而對其他任何對象都可以引用它們:

three := 3.
threePlus := [:s | three + s].

供以后使用

threePlus value: 4    "7"

塊可以嵌套:

random := Random new.
compare := [:p :u | u <= p]
bernoulli60 := [compare value: 0.6 value: random next].

然后序列:

bernoulli60 value.  "true"
bernoulli60 value.  "false"
...
bernoulli60 value.  "true"

大約有60%的時間會回答true

Leandro的答案雖然是正確的,並且具有深刻的小話題理解,但它正在回答您的要求,但是我認為,並不是100%肯定您,您實際上是在詢問如何“玩弄”代碼而無需創建類。

在我眼中,您想要的被稱為工作區 (Smalltalk / X和Dolphin)(它可以具有不同的名稱,例如Pharo Smalltalk中的Playground )。

如果您想玩耍,則需要創建一個局部變量。

| result |

result := 0. "Init otherwise nil"

"Adding results of a simple integer factorial"
1 to: 10 do: [ :integer |
     result := result + integer factorial
].

Transcript show: result.

說明:

我正在使用do:塊進行1-10迭代。 :integer是塊局部變量)。 接下來,我在Transcript上顯示結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM