我不是 J 范围方面的专家,所以如果我犯了错误,请纠正我。 (事实上,这是这个问题的部分原因。)
我想做的是创建一个在语言环境内(但没有)可见的名称。请注意,使用 =.
进行分配不会实现此目的。
我认为这是不可能的,但我希望得到 J 专家的确认。
看到Eelvex的回答,我觉得我有必要澄清一下我的问题了。这就是我想要的:我想要一个在区域设置内但在区域设置之外不可见的全局名称,即使您知道该名称并用区域设置后缀限定它,类似于 OOP 中类的私有(private)成员。
让我们想象一个名为 private
的 J 动词,它在语言环境中将名称设为私有(private)。
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.
最佳答案
编辑,(在 OP 编辑之后)
不,你不能隐藏名字。如果实体在语言环境中可见,则可以从所有语言环境访问它。据我所知,唯一真正私有(private)的名称是在显式 :
定义中用 =.
定义的名称
预览答案:
所有名称在其语言环境内(但不在内)都是可见的。例如:
a_l1_ =: 15
a_l2_ =: 20
coclass 'l1'
a
15
coclass 'l2'
a
20
coclass 'base'
a
|value error: a
关于j - J中如何实现封装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409955/