[英]Make a Matrix class that can be initialized without declaring matrix size first
[英]Can one create a standalone method/function (without any class)
我正在嘗試了解閑聊。 是否可以有一個獨立的方法/函數,它不屬於任何特定類,以后可以調用:
amethod ['amethod called' printNl].
amethod.
上面的代碼給出以下錯誤:
simpleclass.st:1: expected Eval, Namespace or class definition
如何按照錯誤消息的建議使用Eval
或Namespace
?
我嘗試了以下操作,但沒有任何效果:
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.