j - J中如何实现封装?

标签 j

我不是 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/

相关文章:

j - 任意精度数被截断

macos - 如何在OS X的emacs 23中安装新模式?

j - 从 J 中的正态分布生成随机数

j - 了解从 J 中的列表添加

list - J 如何制作随机数的形状

function - 计算使用相同参数调用多个函数的结果的最大乘积

j - 转置方式看似不一致 | : works

j - Append(,) 是如何工作的?

function - 在 J 中编写自定义动词

j - FoldList 像 J 中的原语