我不是J中範圍的專家,所以如果我犯了一個錯誤,請糾正我。 (這實際上是對這一問題的部分原因。)如何在J中實現封裝?
我想要做的就是創建一個名稱可見內(但不沒有)一個語言環境。請注意,分配=.
確實不是達到此目的。
我認爲這是不可能的,但我很樂意得到J專家的確認。
看到Eelvex的回答後,我覺得我必須澄清我的問題。這就是我想要的:我想要一個全局名稱在之內的一個語言環境,但不可見外部一個語言環境,即使您知道名稱並使用語言環境後綴對其進行限定,完全類似於OOP中類的私有成員。
讓我們想象一個名爲private
的J動詞,它在一個語言環境中使名稱變爲私人。
cocurrent 'foo'
x =: 3
private 'x' NB. x is still visible to all members of _foo_, but cannot be accessed in any way outside of _foo_
bar =: 3 : 'x & *'
cocurrent 'base'
bar_foo_ 14 NB. This works, because bar_foo_ can see x_foo_
x_foo_ NB. value error. We can't see x_foo_ because it's private to the locale.
哦,不,我不認爲你可以隱藏的名稱。如果實體在語言環境中可見,則可以從所有語言環境訪問該實體。 AFAIK唯一真正私有的名稱是用明確的':'定義中的'=。* *'定義的名稱。 – Eelvex
如果這條評論澄清你的答案,我將其標記爲正確的。就目前而言,我無法將您的答案標記爲正確,因爲它不能準確回答問題。 –